Купить Matlab  |  Mathematica  |  Mathcad  |  Maple  |  Statistica  |  Другие пакеты Поиск по сайту
Internet-класс  |  Примеры  |  Методики  |  Форум  |  Download
https://hub.exponenta.ru/


Примеры вычислений

В начало книги

 

Предметный указатель

Уравнения в частных производных
К предыдущему разделуК следующему разделу

Новая версия программы Maple "способна" решать аналитически некоторые классы дифференциальных уравнений в частных производных. Для этого введена команда pdesolve ( уравнения, переменные).

Приведем примеры.

> restart;pdesolve( diff(f(x,y),x,x)+5*diff(f(x,y),x,y)=3, f(x,y) );

[Maple Math]

В решении этого уравнения присутствуют произвольные функции _F1, _F2.

> pdesolve( 3*diff(g(x,y),x)+7*diff(g(x,y),x,y)=x*y, g(x,y) );

[Maple Math]

Maple находит решение некоторых видов уравнений с непостоянными коэффициентами, например

> pdesolve(y*diff(U(x,y),x)+x*diff(U(x,y),y)=0, U(x,y) );

[Maple Math]

Неоднородное уравнение для функции U от трех независимых переменных

> pdesolve( diff(U(x, y, z), x)+2*diff(U(x, y, z), y)+5*diff(U(x, y, z),
z)=13*x*y*z, U(x, y, z) );

[Maple Math]

Следующие два примера уравнений математической физики.

Уравнение теплопроводности

> restart;heat:=diff(u(x,t),t)-k*diff(u(x,t),x,x)=0;

[Maple Math]

Команда pdesolve "в лоб" не решает это уравнение, действительно

> pdesolve(heat,u(x,t));

[Maple Math]

Применим известный прием разделения переменных. Для этого вначале сделаем подстановку

> eq:=subs(u(x,t)=X(x)*T(t),heat);

[Maple Math]

Теперь разделим обе части уравнения на X(x)*T(t)

> expand(eq/X(x)/T(t));

[Maple Math]

Разделим переменные

> sep:=(%)+(k*diff(X(x),x,x)/X(x)=k*diff(X(x),x,x)/X(x));

[Maple Math]

Так как в левой и правой частях полученного равенства стоят функции от разных переменных, то правая и левая части являются постоянными величинами.

> lhs(sep)=C;

[Maple Math]

Теперь мы получили обыкновенное дифференциальное уравнение и его решение

> T_sol:=dsolve(%,T(t));

[Maple Math]

Аналогично приравняем константе правую часть равенства

> rhs(sep)=C;

[Maple Math]

Решение полученного обыкновенного дифференциального уравнения

> X_sol:=dsolve(%,X(x),explicit=true);

[Maple Math]

> map(subs,[X_sol],T_sol,X(x)*T(t));

[Maple Math]

> sol:=map(simplify,%);

[Maple Math]

Для упрощения выполним подстановку конкретных значений для произвольных постоянных

> subs(C=k,k=1,_C1=1,_C2=1,sol);

[Maple Math]

> evalc(%);

[Maple Math]

Преобразуем к тригонометрическому виду

> convert(%,trig);

[Maple Math]

и упростим

> S:=evalc(%);

[Maple Math]

Теперь можно построить график первого решения (рис. 9).

> plot3d(op(S),x=-5..5,t=0..5);

[Maple Plot]

рис. 9

Проверим правильность первого решения

> simplify(subs(u(x,t)=sol[1],heat));

[Maple Math]

В качестве еще одного примера рассмотрим волновое уравнение

> restart;wave:=diff(u(x,t),t,t)-c^2*diff(u(x,t),x,x);

[Maple Math]

Найдем решение для u(x,t).

> sol:=pdesolve(wave,u(x,t));

[Maple Math]

Здесь _F1 и _F2 - произвольные функции. Заменим их конкретными функциями f1 и f2

> f1:=xi -> sech(-xi^2);

[Maple Math]

> f2:=xi -> piecewise(-1/2<xi and xi<1/2,1,0);

[Maple Math]

Заменим наименования функций в решении на f1 и f2, а также положим с=1.

> subs(_F1=f1, _F2=f2, c=1, sol);

[Maple Math]

Теперь подставим значения f1 и f2 в u(x,t), чтобы получить конкретное решение.

> subs(%,u(x,t));

[Maple Math]

Применим функцию unapply, чтобы превратить полученное выражение в функцию от x и t

> f:=unapply(%,x,t);

[Maple Math]

Теперь мы можем построить график решения (рис. 10).

> plot3d(f, -10..10, 0..10, grid=[60,60]);

[Maple Plot]

рис. 10

На графике мы видем две волны, которые представляют решение волнового уравнения.

В начало страницы К предыдущему разделуК следующему разделу

Предметный указатель

| На первую страницу | Поиск | Купить Matlab

Исправляем ошибки: Нашли опечатку? Выделите ее мышкой и нажмите Ctrl+Enter


Copyright © 1993-2024. Компания Softline. Все права защищены.

Дата последнего обновления информации на сайте: 04.03.17
Сайт начал работу 01.09.00