Производные при записи дифференциальных уравнений могут задаваться функцией diff или оператором дифференцирования D. Выражение sysODE должно иметь структуру множества и содержать помимо самой системы уравнений их начальные условия.

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

7.2. Примеры решения дифференциальных уравнений

7.2.1. Примеры аналитического решение ОДУ первого порядка

Отвлекшись от физики, приведем несколько примеров на составление и решение дифференциальных уравнений первого порядка в аналитическом виде (файл dea):

> dsolve(diff(y(х),х)-а*х=0, y(х));

> dsolve(diff(y(х),х)-y(х)=ехр(-х), y(х));

> dsolve(diff(y(х),х)-y(х)=sin(х)*х, y(х));

> infolevel[dsolve] := 3:

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

Methods for first order ODEs:

Trying classification methods —

trying a quadrature

trying 1st order linear

<- 1st order linear successful

Обратив внимание на вывод в последнем примере. Он дан при уровне вывода n=3

Следующие примеры иллюстрируют возможность решения одного и того же дифференциального уравнения ode_L разными методами:

> restart: ode_L := sin(x)*diff(y(x),x)-cos(x)*y(x)=0;

> dsolve(ode_L, [linear], useInt);

> value(%);

y(x) = _C1 sin(x)

> dsolve(od_L, [separable], useInt);

> value(%);

ln(sin(x)) - ln(у(x)) + _C1 = 0

> mu := intfactor(ode_L);

> dsolve(mu*ode_L, [exact], useInt);

y(x) = -_C1 sin(x)

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

7.2.2. Полет тела, брошенного вверх

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

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

dem), описывающего движение тела, брошенного вверх на высоте h0 со скоростью v0 при ускорении свободного падения g:

> restart; eq2:=diff(h(t),t$2) = -g;

> dsolve({eq2,h(0)=h[0], D(h)(0)=v[0]},h(t));assign(s2);

Итак, получено общее уравнение для временной зависимости высоты тела h(t). Разумеется, ее можно конкретизировать, например, для случая, когда g=9,8, h0=10 и v0=100:

> g:=9.8:

> s2:=dsolve({eq2,h(0)=10,D(h)(0)=100},h(t));assign(s2);

> plot(h(t),t=0..20,color=black);

Зависимость высоты тела от времени h(t) представлена на рис. 7.5. Нетрудно заметить, что высота полета тела вначале растет и достигнув максимума начинает снижаться. Оговоримся, что сопротивление воздуха в данном примере не учитывается, что позволяет считать задачу линейной. Полученное с помощью Maple 9.5 для этого случая решение совпадает с полученным вручную в примере, описанном в разделе 7.1.3.

Рис. 7.5. Зависимость высоты полета тела от времени h(t)

7.2.3. Поведение идеального гармонического осциллятора

Еще одним классическим применением дифференциальных уравнений второго порядка является решение уравнение идеального гармонического осциллятора (файл deio):

> restart:eq3:=diff(y(t),t$2)=-omega^2*y(t);

> dsolve(eq3,y(t));

у(t) = _C1 sin(ω) + _C2 cos(ω)

> s:=dsolve({eq3,y(0)=-1,D(y)(0)=1}, y(t));

> assign(s);omega:=2;

ω := 2

> plot(y(t),t=0..20,color=black);

График решения этого уравнения (рис. 7.6) представляет хорошо известную синусоидальную

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату