functionalDerivative

Функциональная производная (вариационная производная)

Описание

пример

G = functionalDerivative(f,y) возвращает функциональную производную δSδy(x) из функционального S[y]=abf[x,y(x),y'(x),...]dx относительно функционального y = y (x), где x представляет одну или несколько независимых переменных. Функциональная производная связывает изменение в функциональном S [y] относительно маленького изменения y (x).The, функциональная производная также известна как вариационную производную.

Если y вектор из символьных функций, functionalDerivative возвращает вектор из функциональных производных относительно функций в y, где все функции в y должен зависеть от тех же независимых переменных.

Примеры

свернуть все

Найдите функциональную производную функционального S[y]=bay(x)sin(y(x))dx относительно функции y, где подынтегральное выражение f[y(x)]=y(x)sin(y(x)).

Объявите y(x) как символьная функция и задают f как подынтегральное выражение S. Используйте f и y как параметры functionalDerivative.

syms y(x)
f = y*sin(y);
G = functionalDerivative(f,y)
G(x) = sin(y(x))+cos(y(x))y(x)

Найдите функциональную производную функционального S[u,v]=ba(u2(x)dv(x)dx+v(x)d2u(x)dx2)dx относительно функций u и v, где подынтегральное выражение f[u(x),v(x),u(x),v(x)]=u2dvdx+vd2udx2.

Объявите u(x) и v(x) как символьные функции, и задают f как подынтегральное выражение S.

syms u(x) v(x)
f = u^2*diff(v,x) + v*diff(u,x,x);

Задайте вектор из символьных функций [u v] как второй входной параметр в functionalDerivative.

G = functionalDerivative(f,[u v])
G(x) = 

(2x2 v(x)+2u(x)x v(x)2x2 u(x)-2u(x)x u(x))

functionalDerivative возвращает вектор из символьных функций, содержащих функциональные производные подынтегрального выражения f относительно u и v, соответственно.

Найдите уравнение Euler–Lagrange массового m это соединяется с пружиной с коэффициентом упругости k.

Задайте кинетическую энергию T, потенциальная энергия V, и лагранжевый L из системы. Функция Лагранжа является различием между кинетической и потенциальной энергией.

syms m k x(t)
T = 1/2*m*diff(x,t)^2;
V = 1/2*k*x^2;
L = T - V
L(t) = 

mt x(t)22-kx(t)22

В лагранжевой механике действие, функциональное из системы, равно интегралу функции Лагранжа в зависимости от времени, или S[x]=t1t2L[t,x(t),x˙(t)]dt. Уравнение Euler–Lagrange описывает движение системы для который S[x(t)] является стационарным.

Найдите уравнение Euler–Lagrange путем взятия функциональной производной подынтегрального выражения L и установка его равняется 0.

eqn = functionalDerivative(L,x) == 0
eqn(t) = 

-m2t2 x(t)-kx(t)=0

eqn дифференциальное уравнение, которое описывает массово-пружинное колебание.

Решите eqn использование dsolve. Примите массовый m и коэффициент упругости k положительны. Установите начальные условия для амплитуды колебания как x(0)=10 и начальная скорость массы как x˙(0)=0.

assume(m,'positive')
assume(k,'positive')
Dx(t) = diff(x(t),t);
xSol = dsolve(eqn,[x(0) == 10, Dx(0) == 0])
xSol = 

10cos(ktm)

Очистите предположения для дальнейших вычислений.

assume([k m],'clear')

Задача о брахистохроне состоит в том, чтобы найти самый быстрый путь спуска частицы под силой тяжести без трения. Движение ограничено вертикальной плоскостью. Время для тела, чтобы пройти кривая y(x) от точки a к b под силой тяжести g дают

t=ab1+y22gydx.

Найдите самый быстрый путь путем минимизации изменения в t относительно маленьких изменений пути y. Условие для минимума δtδy(x)=0.

Вычислите функциональную производную, чтобы получить дифференциальное уравнение, которое описывает Задачу о брахистохроне. Используйте simplify упростить уравнение до его ожидаемой формы.

syms g y(x)
assume(g,'positive')
f = sqrt((1 + diff(y)^2)/(2*g*y));
eqn = functionalDerivative(f,y) == 0;
eqn = simplify(eqn)
eqn(x) = 

2y(x)2x2 y(x)+x y(x)2=-1

Это уравнение является стандартным дифференциальным уравнением Задачи о брахистохроне. Чтобы найти решения дифференциального уравнения, используйте dsolve. Задайте 'Implicit' опция к true возвратить неявные решения, которые имеют форму F(y(x))=g(x).

sols = dsolve(eqn,'Implicit',true)
sols = 

(y(x)=C2-xiy(x)=C3+xiσ1=C4+xσ1=C5-xC1+y(x)y(x)=0)where  σ1=C1atan(-C1y(x)-1)-y(x)-C1y(x)-1

Символьный решатель dsolve возвращает общие решения на комплексном пробеле. Symbolic Math Toolbox™ не принимает предположение что символьная функция y(x) isreal.

В зависимости от граничных условий существует два решения действительного пробела Задачи о брахистохроне. Одно из этих двух решений ниже описывает циклоидную кривую на действительном пробеле.

solCycloid1 = sols(3)
solCycloid1 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C4+x

solCycloid2 = sols(4)
solCycloid2 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C5-x

Другое решение на действительном пробеле является горизонтальной прямой линией, где y константа.

solStraight = simplify(sols(5))
solStraight = C1+y(x)=0

Чтобы проиллюстрировать циклоидное решение, рассмотрите пример с граничными условиями y(0)=5 и y(4)=1. В этом случае уравнением, которое может удовлетворить данным граничным условиям, является solCycloid2. Замените этими двумя граничными условиями в solCycloid2.

eq1 = subs(solCycloid2,[x y(x)],[0 5]);
eq2 = subs(solCycloid2,[x y(x)],[4 1]);

Эти два уравнения, eq1 и eq2, имейте два неизвестных коэффициента, C1 и C5. Используйте vpasolve найти числовые решения для коэффициентов. Замените этими решениями в solCycloid2.

coeffs = vpasolve([eq1 eq2]);
eqCycloid = subs(solCycloid2,{'C1','C5'},{coeffs.C1,coeffs.C5})
eqCycloid = 

-6.4199192418473511250705556729108atan(6.4199192418473511250705556729108y(x)-1)-y(x)6.4199192418473511250705556729108y(x)-1=-x-5.8078336827583088482183433150164

Неявное уравнение eqCycloid описывает циклоидное решение Задачи о брахистохроне в терминах x и y(x).

Можно затем использовать fimplicit построить eqCycloid. Начиная с fimplicit только принимает неявные символьные уравнения, которые содержат символьные переменные x и y, преобразуйте символьную функцию y(x) к символьной переменной y. Используйте mapSymType преобразовывать y(x) к x. Постройте циклоидное решение в граничных условиях 0<x<4 и 1<y<5.

funToVar = @(obj) sym('y');
eqPlot = mapSymType(eqCycloid,'symfun',funToVar);
fimplicit(eqPlot,[0 4 1 5])

Figure contains an axes object. The axes object contains an object of type implicitfunctionline.

Для функции u(x,y) это описывает поверхность в трехмерном пространстве, площадь поверхности может быть определена функциональным

F[u]=y1y2x1x2f[x,y(x),u(x,y),ux,uy]dxdy=y1y2x1x21+ux2+uy2dxdy

где ux и uy частные производные u относительно x и y.

Найдите функциональную производную подынтегрального выражения f относительно u.

syms u(x,y)
f = sqrt(1 + diff(u,x)^2 + diff(u,y)^2);
G = functionalDerivative(f,u)
G(x, y) = 

-y u(x,y)22x2 u(x,y)+2x2 u(x,y)+σ122y2 u(x,y)-2y σ1y u(x,y)σ1+2y2 u(x,y)σ12+y u(x,y)2+13/2where  σ1=x u(x,y)

Результатом является уравнение G это описывает минимальную поверхность 3-D поверхности, заданной u(x,y). Решения этого уравнения описывают минимальные поверхности в трехмерном пространстве, такие как пузыри мыла.

Входные параметры

свернуть все

Подынтегральное выражение функционального в виде символьной переменной, функции или выражения. Аргумент f представляет плотность функционального.

Функция дифференцирования в виде символьной функции или вектора, матрицы или многомерного массива символьных функций. Аргумент y может быть функция одной или нескольких независимых переменных. Если y вектор из символьных функций, functionalDerivative возвращает вектор из функциональных производных относительно функций в y, где все функции в y должен зависеть от тех же независимых переменных.

Выходные аргументы

свернуть все

Функциональная производная, возвращенная как символьная функция или вектор из символьных функций. Если вход y вектор, затем G вектор.

Больше о

свернуть все

Функциональная производная

Рассмотрите функциональное

S[y]=abf[x,y(x),y'(x),...,y(n)(x)]dx,

который может выбрать любого путь от a до b в x - пробел.

Для маленького изменения пути y(x) задайте изменение как δy(x)=εϕ(x) в котором ϕ (x) является произвольной тестовой функцией. Изменение в функциональном S

DS[y]=limε0S[y+εϕ]S[y]ε=abδSδy(x)ϕ(x)dx.

Выражение δSδy(x) функциональная производная S относительно y. Линейный функциональный DS [y] также известен как первое изменение или дифференциал Гато функционального S.

Один метод, чтобы вычислить функциональную производную должен применить Разложение Тейлора к выражению S [y + εϕ] относительно ε. Путем хранения терминов первого порядка в ε, выполнения интегрирования частями и выбора граничных условий ϕ(a) = ϕ(b) = ϕ'(a) = ϕ'(b) = ... = 0, функциональная производная становится

δSδy(x)=fyddxfy'+d2dx2fy''...+(1)ndndxn(fy(n))=i=0n(1)ididxi(fy(i)).

Представленный в R2015a