Метод Пикара

Форум пользователей пакета Maple

Модератор: Admin

Кли
Сообщения: 156
Зарегистрирован: Пт ноя 04, 2016 4:54 pm

Метод Пикара

Сообщение Кли » Вс мар 17, 2019 9:47 pm

Здравствуйте!!! Помогите решить дифф.уравнение методом Пикара, мне не удаётся в цикле вычислить интегралы

Код: Выделить всё

restart;
with(plots):
n:=10:
a:=1; b:=2;
f:=unapply(((3*x^2*exp(-x)-(x+1)*y)/x),x,y);
G:=simplify(dsolve({diff(y(x),x)=f(x,y(x)),y(a)=1}));
N:=5: h:=(b-a)/N;
for i from 0 to N do
x[i]:=a+i*h:
end do;
y[0]:=1:
for k from 1 to N do
y[k]:=evalf(y[0]+int(f(x,y[k-1]),x)-subs(x=a,int(f(x,y[k-1]),x))):
end do;
s1:=plot(rhs(G),x=a..b,color=red):
s2:=plot([seq(y(x)],x=a..b}):
display(s1,s2);

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Метод Пикара

Сообщение Kitonum » Чт мар 21, 2019 12:15 am

То, что Вы написали, это не метод Пикара, а что-то непонятное. Метод Пикара будет работать, если программа на каждом шаге сможет вычислить символьно некоторый интеграл. В данном примере Maple вычисляет только первые 2 интеграла. Чтобы интегралы вычислялись и дальше, я на каждом шаге использую приближение сплайном с шагом 0.1 . На графике пятая кривая (синего цвета) практически совпадает с точным решением (красная кривая):

Код: Выделить всё

restart;
with(plots):

a:=1; b:=2;
f:=(x,y)->(3*x^2*exp(-x)-(x+1)*y)/x;
G:=simplify(dsolve({diff(y(x),x)=f(x,y(x)),y(a)=1}));
N:=5: y[0]:=x->1:

for i from 1 to N do
y[i]:=unapply(y[0](x)+int(CurveFitting:-Spline([seq([t,f(t,y[i-1](t))],t=a..b,0.1)], t), t=1..x), x);
end do:

s1:=plot(rhs(G),x=a..b,color=red):
s2:=plot([seq(y[i], i=0..5)],a..b, color=[yellow,gold,green,cyan,khaki,blue]):
display(s1,s2);

Кли
Сообщения: 156
Зарегистрирован: Пт ноя 04, 2016 4:54 pm

Re: Метод Пикара

Сообщение Кли » Чт мар 21, 2019 12:17 pm

спасибо

Кли
Сообщения: 156
Зарегистрирован: Пт ноя 04, 2016 4:54 pm

Re: Метод Пикара

Сообщение Кли » Чт мар 21, 2019 1:14 pm

а как показать, что он удовлетворяет условию Липшица по второму аргументу?

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Метод Пикара

Сообщение Kitonum » Чт мар 21, 2019 7:09 pm

Почитайте статью https://ru.wikipedia.org/wiki/%D0%9B%D0%B8%D0%BF%D1%88%D0%B8%D1%86%D0%B5%D0%B2%D0%BE_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5 про свойства липшицевых отображений.

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Метод Пикара

Сообщение Markiyan Hirnyk » Чт мар 21, 2019 9:06 pm

Kitonum, Вы пишете
Метод Пикара будет работать, если программа на каждом шаге сможет вычислить символьно некоторый интеграл.

Это не обязательно, насколько я понимаю, интеграл можно считать численно. Мэйпл работает с рекурсивными процедурами (option remember).

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Метод Пикара

Сообщение Kitonum » Пт мар 22, 2019 8:20 pm

Markiyan, метод Пикара (он же метод последовательных приближений или метод итераций) для дифуров на каждом шаге возвращает не число, а некоторую функцию, которая получается как результат вычисления интеграла с переменным верхним пределом. Как вы предполагаете считать такой интеграл численно? Можно конечно заменить подынтегральную функцию рядом или сплайном (как в моём коде), но это уже не метод Пикара в чистом виде. Обычно под численным вычислением интеграла понимают вычисление определённого интеграла на фиксированном промежутке.

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Метод Пикара

Сообщение Markiyan Hirnyk » Пт мар 22, 2019 8:30 pm

Kitonum, вот пример

Код: Выделить всё

f := x-> evalf(Int(t^t, t = 0 .. x)) :                             
                 
f(.3);
                          0.2334009959
 f(3/10);
                          0.2334009959
 g := x-> evalf(Int(f(t), t = 0 .. x)) :
g(.5);
                         0.09743848197
                       

Вы пишите
но это уже не метод Пикара в чистом виде

Вас не затруднит дать ссылку в обоснование Ваших слов?

Kitonum
Сообщения: 2078
Зарегистрирован: Ср дек 31, 2008 1:55 pm
Откуда: г. Пенза

Re: Метод Пикара

Сообщение Kitonum » Пт мар 22, 2019 9:06 pm

Конечно я имел в виду решение в аналитическом виде, а не в процедурном. См. например статью в википедии и пример там https://en.wikipedia.org/wiki/Picard%E2%80%93Lindel%C3%B6f_theorem

Markiyan Hirnyk
Сообщения: 1340
Зарегистрирован: Вс дек 04, 2011 11:07 pm

Re: Метод Пикара

Сообщение Markiyan Hirnyk » Пт мар 22, 2019 9:22 pm

Kitonum, то, что Вы имели в виду - это Ваше личное дело. В доказательстве теоремы о существовании решения задачи Коши методом Пикара нет никакого "решения в аналитическом виде". В русскоязычной версии статьи из Вики примера нет. Относительно символьных вычислений приведу такой пример. Рассмотрим функцию f(x)=x^2 и ее значение e^2 при x=e. Все, что мы можем сделать - это взять приближение числа e, например 2,7, и посчитать 2,7^2 =7,29, последнее число является приближением для e^2. Прошу извинения, что повторяю Вам азы численного анализа.