
- •Лекция №8 Обыкновенные дифференциальные уравнения Постановка задачи Коши
- •Метод Пикара
- •Метод малого параметра
- •Метод ломаных
- •Метод Рунге-Кутта
- •Метод Адамса
- •Решатели дифференциальных уравнений в matlab
- •Постановка краевой задачи
- •Метод стрельбы
- •Краевая задача. Разностный метод
- •Краевая задача в среде matlab
Метод Пикара
Данный метод решает задачу Коши. Для простоты записи ограничимся одним дифференциальным уравнением. Алгоритм легко обобщается на случай системы дифференциальных уравнений путем формальной замены u(x) и f(x,u) на соответствующие векторы. Метод Пикара является приближенным методом, обобщающим метод последовательных приближений.
Рассмотрим задачу Коши для уравнения первого порядка
. (6)
Интегрируя дифференциальное уравнение (6), заменим исходную задачу эквивалентной ей задачей решения интегрального уравнения Вольтерра.
. (7)
Решая интегральное уравнение (7) методом последовательных приближений, получим итерационный процесс Пикара
(8)
На каждом этапе итерационного процесса Пикара в (8) интегрирование выполняется либо точно, либо численными методами, разобранными в лекции №4.
Доказательство сходимости метода Пикара предполагает, что в некоторой ограниченной области G(x,u) правая часть уравнения (6) — f(x,u) непрерывна и удовлетворяет по переменной u условию Липшица, т.е.
.
Поскольку область
G(x,u)
ограничена, постольку выполняются
неравенства:
,
.
Введем обозначения для погрешности
приближенного решения: zn(x)
= un(x)
u(x).
Вычитая (7) из (8) и используя условие
Липшица, находим
. (9)
Решая последовательно рекуррентное соотношение (9), находим
.
Из последних неравенств следует оценка погрешности
. (10)
Из оценки погрешности
в (10) следует, что
при n
,
т.е. приближенное решение равномерно
сходится к точному во всей области
G(x,u).
Для иллюстрации метода Пикара применим его к решению уравнения вида:
. (11)
На листинге_№2 приведен код программы, которая рассчитывает последовательные приближенные решения уравнения (11) методом Пикара.
Листинг_№2
%Программа расчета последовательных
%приближений методом Пикара для решения
%уравнения u'(x)=x^2+u^2, u(0)=0
%очищаем рабочее пространство
clear all
%задаем максимальное число
%последовательных приближений
nmax=4;
%определяем символические переменные
syms x0 u0 x
x0=0; u0=0; u=u0;
%задаем цикл последовательных приближений Пикара
for n=1:nmax
u=u0+int(x^2+u^2,x0,x)
end
Ниже приведен итог работы кода программы листинга_№2 в виде четырех последовательных приближений к решению уравнения (11). Видно, что при |x| 1 приближения быстро сходятся к истинному решению с высокой точностью.
u =
1/3*x^3
u =
1/3*x^3+1/63*x^7
u =
1/59535*x^15+2/2079*x^11+1/63*x^7+1/3*x^3
u =
1/109876902975*x^31+4/3341878155*x^27+ 662/10438212015*x^23+82/37328445*x^19+ 13/218295*x^15+ 2/2079*x^11 +1/63*x^7+1/3*x^3
Метод малого параметра
Метод малого параметра был предложен А.Пуанкаре в 1892г. Пусть правая часть уравнения (6) зависит от параметра , т.е.
, (12)
при этом известно некоторое частное решение u0(x) при некотором значении параметра = 0. Решение будем искать в виде ряда
. (13)
Подставим (13) в (12) и проведем разложение в ряд Тейлора по степеням ( 0). Объединим слагаемые с сомножителями одной и той же степени по ( 0) и приравняем их к нулю, тогда
(14)
и т.д. Общий член разложения (14) можно представить в виде
(15)
т.е. определение коэффициентов разложения (13) сводится к решению линейных уравнений (15).
Рассмотрим пример. Пусть f(x,u;) = x2 + (1 + )u2 и 0 = 1. На листинге_№3 приведен код программы, которая аналитически решает уравнения (14) для нашего примера.
Листинг_№3
%Программа позволяющая аналитически решать
%дифференциальное уравнение u'=f(x,u,L) методом
%малого параметра до второго порядка
%очищаем рабочее пространство
clear all
%определяем символические переменные
syms x u u0 u1 L L0
%определяем значение параметра, в окрестности
%которого решение раскладывается в ряд Тейлора
L0=-1;
%определяем правую часть дифференциального уравнения
f=x^2+(1+L)*u^2;
f0=compose(f,L0,L,L);
f0=compose(f0,u0,u,u0);
%находим нулевое приближение
u0=dsolve(['Du0=' char(f0)],'u0(0)=0','x')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
duf=diff(f,u);
duf0=compose(duf,L0,L,L);
duf0=compose(duf0,u0,u,x);
dLf=diff(f,L);
dLf0=compose(dLf,L0,L,L);
dLf0=compose(dLf0,u0,u,x);
%находим первое приближение
u1=dsolve(['Du1=' char(duf0) '*u1+' char(dLf0)],...
'u1(0)=0','x')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d2uf=diff(f,u,2);
d2uf0=compose(d2uf,L0,L,L);
d2uf0=compose(d2uf0,u0,u,x);
d2Luf=diff(dLf,u);
d2Luf0=compose(d2Luf,L0,L,L);
d2Luf0=compose(d2Luf0,u0,u,x);
d2Lf=diff(f,L,2);
d2Lf0=compose(d2Lf,L0,L,L);
d2Lf0=compose(d2Lf0,u0,u,x);
alph2=2*duf0;
bet2=d2uf0*u1^2+d2Luf0*u1+d2Lf0;
%находим второе приближение
u2=dsolve(['Du2=' char(alph2) '*u2+' char(bet2)],...
'u2(0)=0','x')
Итог работы программы листинга_№3 приведен ниже в виде аналитических выражений для приближений u0(x), u1(x), u2(x) соответственно.
u0 =
1/3*x^3
u1 =
1/63*x^7
u2 =
2/2079*x^11