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). Функциональная производная также известна как вариационная производная.

Если 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)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))[diff (v (x), x, 2) + 2 * u (x) * diff (v (x), x); diff (u (x), x, 2) - 2 * u (x) * diff (u (x), x)]

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

Найдите уравнение Эйлера-Лагранжа массовой 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(m * (diff (x (t), t)) ^ 2 )/2 - (k * x (t) ^ 2 )/2

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

Найдите уравнение Эйлера-Лагранжа, взяв функциональную производную интеграла L и установите его равным 0.

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

-m2t2 x(t)-kx(t)=0- m * diff (x (t), t, 2) - k * x (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)10 * cos ((sqrt (k) * t )/sqrt (m))

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

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=-12 * y (x) * diff (y (x), x, 2) + (diff (y (x), 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[y (x) = = C2 - x * sym (1i); y (x) = = C3 + x * sym (1i); C1 * atan (sqrt (- C1/y (x) - 1)) - y (x) * sqrt (- C1/y (x) - 1) = = C4 + x; C1 * atan (sqrt (- C1/y (x) - 1)) - y (x) * sqrt (- C1/y (x) - 1) = = C5 - x; (C1 + y (x) )/y (x) = = 0]

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

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

solCycloid1 = sols(3)
solCycloid1 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C4+xC1 * atan (sqrt (- C1/y (x) - 1)) - y (x) * sqrt (- C1/y (x) - 1) = = C4 + x

solCycloid2 = sols(4)
solCycloid2 = 

C1atan(-C1y(x)-1)-y(x)-C1y(x)-1=C5-xC1 * atan (sqrt (- C1/y (x) - 1)) - y (x) * sqrt (- C1/y (x) - 1) = = C5 - x

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

solStraight = simplify(sols(5))
solStraight = C1+y(x)=0C1 + 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- vpa ('6.4199192418473511250705556729108') *atan (sqrt (vpa ('6.4199192418473511250705556729108') год (x) - 1)) - y (x) *sqrt (vpa ('6.4199192418473511250705556729108') год (x) - 1) == - x - vpa ('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. The axes 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.

Найдите производную функции integrand 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)- ((diff (u (x, y), y)) ^ 2 * diff (u (x, y), x, 2) + diff (u (x, y), x, x) ^ 2 * diff (u (x, y), y, 2) - 2 * diff (diff (u (x, y), 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] также известен как первое изменение или дифференциал Gateaux функционального S.

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

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

Введенный в R2015a