exponenta event banner

Учебное пособие по функциональным производным

В этом примере показано, как использовать функциональные производные в символьной математической Toolbox™ на примере волнового уравнения. В этом примере выполняются символичные вычисления для получения аналитических результатов. Волновое уравнение для фиксированной на его концах строки решают с помощью функциональных производных. Функциональная производная является производной функциональной относительно функции, от которой зависит функциональная группа. Символьный математический Toolbox™ реализует функциональные производные, используя functionalDerivative функция.

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

Рассмотрим строку длины L приостановлено между двумя точками x = 0 и x = L. Струна имеет характерную плотность на единицу длины и характерное натяжение. Определите длину, плотность и натяжение в качестве констант для последующего использования. Для простоты задайте для этих констант значение 1.

Length = 1;
Density = 1;
Tension = 1;

Если струна находится в движении, кинетическая и потенциальная энергии струны являются функцией ее смещения от покоя S(x,t), которое изменяется в зависимости от положения x и время t. Если d - плотность на единицу длины, кинетическая энергия равна

T=∫0Ld2 (ddtS (x, t)) 2dx.

Потенциальная энергия

V=∫0Lr2 (ddxS (x, t)) 2dx,

где r - напряжение.

Введите эти уравнения в MATLAB ®. Поскольку длина должна быть положительной, задайте это предположение. Это предположение позволяетsimplify для упрощения результирующих уравнений в ожидаемую форму.

syms S(x,t) d r v L
assume(L>0)
T(x,t) = int(d/2*diff(S,t)^2,x,0,L);
V(x,t) = int(r/2*diff(S,x)^2,x,0,L);

Действие A является T-V. Принцип наименьшего действия гласит, что действие всегда сводится к минимуму. Определите условие минимального действия, найдя функциональную производную A в отношении S использование functionalDerivative и приравнять его к нулю.

A = T-V;
eqn = functionalDerivative(A,S) == 0
eqn(x, t) = 

Lr2x2 S(x,t)-Ld2t2 S(x,t)=0L*r*diff(S(x, t), x, 2) - L*d*diff(S(x, t), t, 2) == 0

Упрощение уравнения с помощью simplify. Преобразование уравнения в ожидаемую форму путем замены r/d с квадратом скорости волны v.

eqn = simplify(eqn)/r;
eqn = subs(eqn,r/d,v^2)
eqn(x, t) = 

2t2 S(x,t)v2=2x2 S(x,t)diff(S(x, t), t, 2)/v^2 == diff(S(x, t), x, 2)

Решите уравнение методом разделения переменных. Набор S(x,t) = U(x)*V(t) разделить зависимость от положения x и время t. Разделите обе стороны результирующего уравнения, используя children.

syms U(x) V(t)
eqn2 = subs(eqn,S(x,t),U(x)*V(t));
eqn2 = eqn2/(U(x)*V(t))
eqn2(x, t) = 

2t2 V(t)v2V(t)=2x2 U(x)U(x)diff(V(t), t, 2)/(v^2*V(t)) == diff(U(x), x, 2)/U(x)

tmp = children(eqn2);

Обе стороны уравнения зависят от разных переменных, но равны. Это возможно только в том случае, если каждая сторона является константой. Приравнять каждую сторону к произвольной константе C чтобы получить два дифференциальных уравнения.

syms C
eqn3 = tmp(1) == C
eqn3 = 

2t2 V(t)v2V(t)=Cdiff(V(t), t, 2)/(v^2*V(t)) == C

eqn4 = tmp(2) == C
eqn4 = 

2x2 U(x)U(x)=Cdiff(U(x), x, 2)/U(x) == C

Решение дифференциальных уравнений с помощью dsolve с условием, что смещение 0 в x = 0 и t = 0. Упрощение уравнений до ожидаемой формы с помощью simplify с Steps параметр имеет значение 50.

V(t) = dsolve(eqn3,V(0)==0,t);
U(x) = dsolve(eqn4,U(0)==0,x);
V(t) = simplify(V(t),'Steps',50)
V(t) = -2C1sinh(Ctv)-2*C1*sinh(sqrt(C)*t*v)
U(x) = simplify(U(x),'Steps',50)
U(x) = 2C1sinh(Cx)2*C1*sinh(sqrt(C)*x)

Получите константы в уравнениях.

p1 = setdiff(symvar(U(x)),sym([C,x]))
p1 = C1C1
p2 = setdiff(symvar(V(t)),sym([C,v,t]))
p2 = C1C1

Строка фиксируется в позициях x = 0 и x = L. Условие U(0) = 0 уже существует. Применение граничного условия, U(L) = 0 и решить для C.

eqn_bc = U(L) == 0;
[solC,param,cond] = solve(eqn_bc,C,'ReturnConditions',true)
solC = 

-k2π2L2-(k^2*sym(pi)^2)/L^2

param = kk
cond = kZC101kin(k, 'integer')&C1 ~= 0&1 <= k
assume(cond)

Решение S(x,t) является продуктом U(x) и V(t). Найдите решение и замените значения признаков строки в решении, чтобы получить окончательную форму решения.

S(x,t) = U(x)*V(t);
S = subs(S,C,solC);
S = subs(S,[L v],[Length sqrt(Tension/Density)]);

Параметры p1 и p2 определяют амплитуду колебаний. Набор p1 и p2 кому 1 для простоты.

S = subs(S,[p1 p2],[1 1]);
S = simplify(S,'Steps',50)
S(x, t) = 4sin(πkt)sin(πkx)4*sin(sym(pi)*k*t)*sin(sym(pi)*k*x)

Струна имеет различные режимы вибрации для различных значений k. Постройте график первых четырех режимов для произвольного значения времени t. Используйте param аргумент, возвращенный solve для параметра адреса k.

Splot(x) = S(x,0.3);
figure(1)
hold on
grid on
ymin = double(coeffs(Splot));
for i = 1:4
    yplot = subs(Splot,param,i);
    fplot(yplot,[0 Length])
end
ylim([-ymin ymin])
legend('k = 1','k = 2','k = 3','k = 4','Location','best')
xlabel('Position (x)')
ylabel('Displacement (S)')
title('Modes of a string')

Figure contains an axes. The axes with title Modes of a string contains 4 objects of type functionline. These objects represent k = 1, k = 2, k = 3, k = 4.

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

F (x, t) =∑k=nmAksin (¼ kt) грех (¼ kx),

где Ak обозначает произвольные константы.

Использовать symsum для суммирования первых пяти режимов строки. На новом рисунке отобразите результирующую форму сигнала в тот же момент времени, что и предыдущие формы сигнала для сравнения.

figure(2)
S5(x) = 1/5*symsum(S,param,1,5);
fplot(subs(S5,t,0.3),[0 Length])
ylim([-ymin ymin])
grid on
xlabel('Position (x)')
ylabel('Displacement (S)')
title('Summation of first 5 modes')

Figure contains an axes. The axes with title Summation of first 5 modes contains an object of type functionline.

На рисунке показано, что режимы суммирования позволяют моделировать качественно иную форму волны. Здесь мы указали начальное условие S (x, t = 0) = 0 для всех x.

Можно вычислить значения Ak в уравнении F (x, t) =∑k=nmAksin (¼ kt) sin (¼ kx), задав условие для начальной скорости

ut (x, t = 0) = Ft (x, 0).

Соответствующее суммирование мод может представлять любую форму сигнала, которая аналогична использованию ряда Фурье для представления движения строки.