Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция№8.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
753.66 Кб
Скачать

Метод Пикара

Данный метод решает задачу Коши. Для простоты записи ограничимся одним дифференциальным уравнением. Алгоритм легко обобщается на случай системы дифференциальных уравнений путем формальной замены 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