Производные при записи дифференциальных уравнений могут задаваться функцией 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(%);
> dsolve(od_L, [separable], useInt);
> value(%);
> mu := intfactor(ode_L);
> dsolve(mu*ode_L, [exact], useInt);
Разумеется, приведенными примерами далеко не исчерпываются возможности аналитического решения дифференциальных уравнений.
7.2.2. Полет тела, брошенного вверх
Из приведенных выше примеров видно, что для задания производной используется ранее рассмотренная функция diff. С помощью символа $ в ней можно задать производную более высокого порядка.
В соответствии со вторым законом Ньютона многие физические явления, связанные с движением объектов, описываются дифференциальными уравнениями второго порядка. Ниже дан пример задания и решения такого уравнения (файл
dem), описывающего движение тела, брошенного вверх на высоте h0 со скоростью v0 при ускорении свободного падения
> 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);
Зависимость высоты тела от времени
Рис. 7.5. Зависимость высоты полета тела от времени
7.2.3. Поведение идеального гармонического осциллятора
Еще одним классическим применением дифференциальных уравнений второго порядка является решение уравнение идеального гармонического осциллятора (файл deio):
> restart:eq3:=diff(y(t),t$2)=-omega^2*y(t);
> dsolve(eq3,y(t));
> s:=dsolve({eq3,y(0)=-1,D(y)(0)=1}, y(t));
> assign(s);omega:=2;
> plot(y(t),t=0..20,color=black);
График решения этого уравнения (рис. 7.6) представляет хорошо известную синусоидальную