Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zv.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2 Мб
Скачать
☆

8.2 Багатокрокові методи

8.2.1 Метод прогнозу і корекції

Підправивши схему Ейлера в середній точці одержимо схему прогнозу

, (8.20)

де наближене значення . Використовувати формулу (8.20) не можна через те, що схема прогнозу нестійка. З цієї причини використовуємо схему корекції

(8.21)

Для оцінки похибки корекції розкладемо в ряд Тейлора в околі точки корекцію

та саму функцію .

Віднявши ці два розкладання , отримаємо

. (8.22)

Для оцінки похибки прогнозу розкладемо в ряд Тейлора в околі точки прогноз

та саму функцію

.

Віднявши ці два розкладання , отримаємо похибку прогнозу

. (8.23)

З цих оцінок зрозуміло, що прогноз наближає розв’язок з недостачею, а корекція з надлишком. Отже, точне значення розв’язку лежить між прогнозом і корекцією. На будь-якому кроці можна оцінити точність розв’язку . Якщо задається її значення , то .

Віднімаючи рівності (8.23) та (8.22), маємо

.

Уточнюємо розв’язок, виходячи з формули (8.22)

. (8.24)

Відтак формула (8.24) завершує схему прогнозу і корекції. .

Приклад 1 Розв’язати задачу Коші для диференціального рівняння другого порядку:

Розв’язання. 1 Введемо нові змінні :

U=y; V= . Тоді, обравши сітку , визначимо на ній сіткові функції :

2 Знаходимо і ( ) за допомогою розкладання в ряд Тейлора :

3 З диференціального рівняння знаходимо і :

Визначаємо прогноз розв’язку в точці

.

Тимчасово покладаючи U2=P2 ; , можна отримати

Обчислюємо корекцію . Тепер можна визначити V2

І нарешті на даному кроці уточнюємо розв’язок

Похибка обчислення .

Приклад 2 Використовуючи метод прогнозу і корекції, реалізувати алгоритм розв’язку крайової задачі для звичайного диференціального рівняння з точністю на псевдокоді.

Розв’язання

Після заміни

отримаємо (користуючись системою символічної математики Derive)

vo1:=-0.3-vo/(0.7)

vo2:=1-2*vo-(vo1*(0.7)-vo)/(0.7)^2

vo3:=-2*vo1-(vo2*(0.7)^3-2*(0.7)*(vo1*(0.7)-vo))/(0.7)^4

u1:=0.5+0.3*vo+vo1*(0.3)^2/2+vo2*(0.3)^3/6

(24018*vo+48307)/98000

v1:=vo+0.3*vo1+vo2*(0.3)^2/2+vo3*(0.3)^3/6

(2099500*vo-129339)/3430000

2*u1+3*v1=1.2

SOLVE(2*u1+3*v1=1.2,vo);

Simp(#9)

[vo=1122527/7979760]; Approx(#10)

[vo=5122/36411=0.140671]

тоді розв’яжемо систему:

//x0 – початкове значення

//xn – кінцеве значення

//h – початковий крок

//X,Y – масиви результатів

Prognose_Correction(x0,u0,v0,h,X,Y):

  1. u01:=v01;

  2. v01:=x0-2*u0-v0/x0

  3. u02:=v01

  4. v02:=1-2*u01-((v01*x0-v0)/sqr(x0))

  5. u03:=v02

  6. v03:=-2*u02-((v02*x0*sqr(x0)-2*v01*sqr(x0)+2*v0*x0)/sqr(sqr(x0)))

  7. u1:=u0+h*u01+h*h*u02/2+h*h*h*u03/6

  8. v1:=v0+h*v01+h*h*v02/2+h*h*h*v03/6

  9. i:=0

  10. while (x1<=xN) do

  11.     i++

  12.     repeat

  13.         x1:=x0+i*h

  14.         x2:=x0+(i+1)*h

  15.         v11:=x1-2*u1-v1/x1

  16.         u11:=v1

  17.         p2:=u0+2*h*u11

  18.         p2z:=v0+2*h*v11

  19.         u2:=p2

  20.         v2:=p2z

  21.         u21:=p2z

  22.         v21:=x2-2*p2-p2z/x2

  23.         c2z:=v1+h*(v11+v21)/2

  24.         v2:=c2z+(p2z-c2z)/5

  25.         u21:=v2

  26.         c2:=u1+h*(u11+u21)/2

  27.         u2:=c2+(p2-c2)/5

  28.         if abs(p2-c2)<eps then

  29.             X[i]:=x2;

  30.             Y[i]:=u2;

  31.         fi

  32.         if abs(p2-c2)>e then

  33.             h:=h/2;

  34.         fi

  35.      until abs(p2-c2)<eps;

  36. done //while

end

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]