exponenta event banner

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 возвращает вектор символьных функций, содержащий функциональные производные интеграла 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), (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 и начальную скорость массы как (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')

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

t=∫ab1+y′22gydx.

Найдите самый быстрый путь, минимизируя изменение 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 возвращает общие решения в сложном пространстве. Символьная математическая 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')/y(x) - 1)) - y(x)*sqrt(vpa('6.4199192418473511250705556729108')/y(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), которая описывает поверхность в 3-D пространстве, площадь поверхности может быть определена функциональным

F[u]=∫y1y2∫x1x2f[x,y (x), u (x, y), ux,uy]dxdy=∫y1y2∫x1x21+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)-((diff(u(x, y), y))^2*diff(u(x, y), x, 2) + diff(u(x, y), x, 2) + diff(u(x, y), x)^2*diff(u(x, y), y, 2) - 2*diff(diff(u(x, y), x), y)*diff(u(x, y), y)*diff(u(x, y), x) + diff(u(x, y), y, 2))/(diff(u(x, y), x)^2 + (diff(u(x, y), y))^2 + 1)^sym(3/2)

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

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

свернуть все

Интегрирует функциональную, заданную как символьная переменная, функция или выражение. Аргумент 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) =∂f∂y−ddx∂f∂y'+d2dx2∂f∂y "−... + (1) ndndxn (∂f∂y (n)) =∑i=0n (1) ididxi (∂f∂y (i)).

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