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


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

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

 

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

Обыкновенные дифференциальные уравнения
К предыдущему разделуК следующему разделу

Для решения обыкновенных дифференциальных уравнений и систем используется команда

dsolve (уравнения, переменные, опции), где уравнения - заданные дифференциальные уравнения, переменные - те переменные по отношению к которым ищется решение, опции - необязательные опции, задаваемые в виде ключевое слово=значение.

Команда dsolve способна решать аналитически большое количество дифференциальных уравнений.

Если задана опция type=exact, то команда пытается найти аналитическое решение - эта опция задана по умолчанию. Другие возможные значения этой опции type=series (в этом случае решение ищется в виде ряда) и type=numeric (в этом случае ищется численное решение).

Можно задать еще несколько опций, которые определяют: будет ли решение искаться в явном виде или нет ( explicit=true или explicit=false ), задают метод решения (например method=laplace )

Если задана опция type=numeric , то можно также задать метод численного расчета, например

method=rkf45 - метод Рунге-Кутта четвертого-пятого порядка;

method=dverk78 - метод Рунге-Кутта седьмого-восьмого порядка,

method=classical - содержит несколько классических методов (Эйлера, Рунге-Кутта третьего порядка и некоторые другие),

method=gear и method=mgear - одношаговый и многошаговый методы Гира. Приведем примеры

> dsolve(diff(y(x),x$2) - y(x) = sin(x)*x, y(x));

[Maple Math] [Maple Math]
[Maple Math]
[Maple Math]

В полученном решении _С1, _С2 - произвольные постоянные. Начальные условия в дифференциальных уравнениях задаются через запятую, при этом уравнение и начальное условие объединяются в набор.

> restart;dsolve({diff(v(t),t)+2*t=0, v(1)=5}, v(t));

[Maple Math]

Производные в начальных условиях записываются в операторном виде (как D(D(y))(0) или (D@@2)(y)(0)).

> de1 := diff(y(t),t$2) + 5*diff(y(t),t) + 6*y(t) = 0;

[Maple Math]

> dsolve({de1, y(0)=0, D(y)(0)=1}, y(t),method=laplace);

[Maple Math]

Уравнение четвеертого порядка

> de2 := diff(y(x),x$4)+2*diff(y(x),x$2) -cos(x)=3;

[Maple Math]

> dsolve(de2,y(x)):combine(%);

[Maple Math]

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

> restart;q:=(2*sqrt(x*y(x))-x)*diff(y(x),x)+y(x);

[Maple Math]

Для замены переменных применчется команда Dchangevar пакета DEtools

> with(DEtools):f:=Dchangevar({y(x)=v(x)*x},[q],x);

[Maple Math]

Теперь находим решение для функции v(x)

> w:=dsolve(f,v(x));

[Maple Math]
[Maple Math] [Maple Math]

Чтобы получить искомое решение y(x) делаем облатную подстановку

> W1:=subs({v(x)=y(x)/x},w[1]);W2:=subs({v(x)=y(x)/x},w[2]);

[Maple Math]

[Maple Math]

> Y1:=solve(W1,y(x));Y2:=solve(W2,y(x));

[Maple Math]

[Maple Math]

> Z1:=simplify(subs(_C1=1,Y1));Z2:=simplify(subs(_C1=1,Y2));

[Maple Math]

[Maple Math]

> plot({Z1,Z2},x=0..3);

[Maple Plot]

Можно найти функции, линейная комбинация которых даст полное решение дифференциального уравнения. Для этого в команду dsolve добавляется опция output=basis :

> dsolve(2*x*diff(y(x),x$2)+diff(y(x),x)+3*y(x)=x,y(x),output=basis);

[Maple Math]

Система дифференциальных уравнений вместе с начальными данными записывается в виде набора (последовательности выражений в фигурных скобках) в аргументе команды dsolve

> sys := diff(y(x),x)=z(x)-y(x)-x, diff(z(x),x)=y(x):

> fcns := {y(x), z(x)}:

> Y:=dsolve({sys,y(0)=0,z(0)=1}, fcns);

[Maple Math]
[Maple Math] [Maple Math]
[Maple Math]

> plot({rhs(Y[1]),rhs(Y[2])},x=-2..7);

[Maple Plot]

Решение этой же системы можно найти также в виде степенных рядов

> dsolve({sys,y(0)=0,z(0)=1}, fcns, type=series);

[Maple Math] [Maple Math]

 

Численное решение той же системы достигается простой установкой опции type=numeric

> F := dsolve({sys,y(0)=0,z(0)=1}, fcns, type=numeric);

[Maple Math]

Как видим, решение выводится в виде процедуры нахождения численных значений методом Рунге-Кутта, используемом программой по умолчанию. Чтобы найти решение при значении независимой переменной x равном, скажем, 1 достаточно записать:

> F(-2);

[Maple Math]

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

> sys2 := {(D@@2)(y)(x)=2*x^3*y(x), y(0)=1, D(y)(0)=1}:
s := dsolve(sys2, {y(x)}, type=numeric, method=dverk78,
value=array([1.0,1.5,1.7]));

[Maple Math]

Так можно извлечь из массива конкретное значение.

> s[2,1][2,3];

[Maple Math]

Maple V 4.0 имеет эффективные алгоритмы для решения жестких дифференциальных уравнений и систем

Один из таких алгоритмов - метод одношаговой интерполяции Гира применен для решения следующего уравнения

> Digits := 10:
deq1 := {diff(y(x), x$3) = y(x)*diff(y(x), x)-x}:
init1 := {(D@@2)(y)(1) = 4, D(y)(1) = 3, y(1) = 2.4 }:
ans1 := dsolve(deq1 union init1, y(x), type=numeric,
method=gear[polyextr], stepsize=0.015, minstep=Float(1,-11),
errorper=Float(1,-5)):
ans1(1.01);

[Maple Math] [Maple Math]

При решении следующего дифференциального уравнения применен метод многошаговой интерполяции Гира.

> Digits := 12:
deq3 := diff(y(t), t$2) = 100*(exp(-10*t)+exp(10*t)):
ans3 := dsolve({deq3}, y(t), numeric, method=mgear[msteppart],
initial=array([2,0]), start=0):
ans3(0.7653);

[Maple Math]

Рассмотрим дифференциальное уравнение Ньютона, описывающее движение тела под действием периодической силы [Maple Math] и учитывающее упругую силу kf(x)

> restart;
deq:= m*diff(x(t),t,t)+k*x(t)=a*cos(omega*(t-t0));

[Maple Math]

Для решения этого уравнения применим метод преобразования Фурье

> with(inttrans):F:=fourier(deq,t,ti);

[Maple Math] [Maple Math]

Теперь решим полеченное алгебраическое уравнение относительно преобразования фурье от искомой функции f(x)

> S:=solve(F,fourier(x(t),t,ti));

[Maple Math]

При разумном допущении относительно частоты колебаний [Maple Math] получим после упрощения

> assume(omega>0);simplify(S);

[Maple Math]

В последнюю формулу входит обобщенная функция Дирака Dirac. Теперь при помощи обратного Фурье-преобразования найдем искомую функцию

> invfourier(%,ti,t);

[Maple Math]

> simplify(%);

[Maple Math]

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

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

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

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


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

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