Всего на сайте:
303 тыс. 117 статей

Главная | Математика

Лабораторная работа №1 Решение ОДУ различными методами  Просмотрен 215

 

Задача: решить уравнение следующего вида: , где и при .

1. Решение методом неопределенных коэффициентов

Для начала отменим все определения и зададим функции p(x) и q(x), используя оператор функциональной зависимости.

> restart;

q:=x->cos(x);

p:=x->-tan(x);

Обозначим переменными ur[1] и ur[2] заданное уравнение и его однородную форму. Через xp и yp обозначим условие , то есть . Функция lhs(<уравнение>) возвращает левую часть уравнения. rhs – правую.

> ur[1]:=D(y)(x)+p(x)*y(x)=q(x);

ur[2]:=lhs(ur[1])=0;

xp:=0;

yp:=2;

Получим общее однородное решение уравнения, возьмем его правую часть. Заменим в ней постоянную _С1 произвольной переменной С, зависящей от x и присвоим полученное выражение переменной igr. Один из способов производить замену – это использование функции eval с двумя параметрами, где первый – выражение, а второй – список равенств, в соответствии с которыми будет произведена замена.

> rhs(dsolve(ur[2],y(x)));

igr:=eval(%,[_C1=C(x)]);

Затем возьмем производную полученного общего решения, для того, чтобы, заменив и в полном уравнении, определить С(х). Обозначим производную переменной igr1.

> igr1:=diff(%,x);

Произведем замену. Для нахождения С(х) решим дополнительное дифференциальное уравнение по С(х) с граничными условием .

> eval(ur[2],[y(x)=igr,D(y)(x)=igr1]);

dsolve({lhs(%)=rhs(ur[1]),C(xp)=yp},C(x));

Таким образом мы получили функцию С(х). Подставив ее в общее решение, мы получим полное решение уравнения:

> 'y(x)'=eval(igr,[C(x)=rhs(%)]);

 

 

2. Решение методом замены

Отличием от предыдущего решения будет использование функции declare пакета PDEtools, которая заменит все представления производной апострофами, соответствующими порядку производной.

> restart;

PDEtools[declare](y(x),u(x),v(x),prime=x):

q:=x->cos(x);

p:=x->-tan(x);

xp:=0;

yp:=2;

Обозначим переменной ur[1] заданное уравнение.

> ur[1]:=D(y)(x)+p(x)*y(x)=q(x);

Преобразуем уравнение к виду с производной.

Произведем замену . С помощью функции collect (collect(<выражение>,<переменная>)) соберем коэффициенты при . Полученное уравнение обозначим переменной urav:

> convert(ur[1],diff);

eval(%,[y(x)=u(x)*v(x)]);

urav:=collect(%,v(x));

Функции и мы можем выбирать произвольным образом. Легко заметить, что уравнение заметно упрощается, если . Это условие обозначим как ur[1], а оставшееся выражение – ur[2].

> ur[1]:=lhs(eval(urav,[v(x)=1]))=0;

ur[2]:=lhs(urav)-lhs(ur[1])*v(x)=rhs(urav);

Решим уравнение для . Функции произвольные, поэтому константу в решении примем равной единице.

> u(x):=eval(rhs(dsolve(ur[1],u(x))),[_C1=1]);

Решим уравнение для . Константу заменим переменной C:

> v(x):=eval(rhs(dsolve(ur[2],v(x))),[_C1=C]);

Умножив полученные результаты, получим общее неоднородное решение заданного уравнения:

> y(x):=u(x)*v(x);

Подставим граничные условия и получим значение C:

> C:=solve(eval(y(x),[x=xp])=yp,C);

Подставив С, получим частное неоднородное решение:

> 'y(x)'=eval(y(x));

Теперь воспользуемся функцией plot из пакета plots, чтобы построить график решения.

Ø plot(y(x),x=xp-1..xp+1);

 

График аналитического решения.

 

3. Решение встроенными средствами Maple.

Отменим все определения.

> restart;
xp:=0;

yp:=2;

Воспользуемся операторной формой записи уравнения с граничными условиями. Применим dsolve:

> dsolve([D(y)(x)+p(x)*y(x)=q(x),y(xp)=yp],y(x));

4. Решение численными методами.

Воспользуемся для этого параметрами numeric и range (см. Примеры численного решения ОДУ). Полученную процедуру обозначим как re1.

>re1:=dsolve({D(y)(x)+p(x)*y(x)=q(x),y(xp)=yp},y(x),numeric, range=xp-1..xp+1);

Построим график решения.
> with(plots):

odeplot(re1);

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

 

Предыдущая статья:Примеры численного решения ОДУ Следующая статья:Лабораторная работа № 2 Интерполяция функции полиномами Лежандра
page speed (0.0323 sec, direct)