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

Страницы работы

Содержание работы


МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

СУМСЬКИЙ ДЕРЖАВНИЙ УНІВЕРСИТЕТ

КАФЕДРА ІНФОРМАТИКИ


Звіт з лабораторної роботи №8

на тему:

Чисельні методи розв’язання звичайних диференціальних рівнянь ”

з дисципліни:

“Чисельні методи”

Виконав:

студент групи ІН-62

Карчов Валерій

2008


Умова

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

Нехай  та . Тоді задана система прийме вигляд:

Щоб звести отриману систему до системи з крайовими умовами, виразимо v0:

Знайдемо v0, розклавши  та  в ряд Тейлора:

Виразимо  і  через v0 та розв’яжемо рівняння:

Отримаємо систему з крайовими умовами:

Визначимо прогноз та корекцію:

    

  

Програмна реалізація

Для реалізації програми була обрана мова програмування Delphi.

В результаті роботи програми, ми отримуємо послідовність наближень та різницю між ними, а також кінцевий результат чисельного інтегрування .

Лістинг програми

program l8;

{$APPTYPE CONSOLE}

uses SysUtils,math;

const eps=0.0001;

 function vp1(v:double):double;

 begin

    result:=v/2-6.38;

 end;

 function vp2(v:double):double;

 begin

    result:=vp1(v)/2-3*v-5.2;

 end;

 function vp3(v:double):double;

 begin

    result:=vp2(v)/2+3*vp1(v)-4;

 end;

 function vp4(v:double):double;

 begin

    result:=vp3(v)/2+3*vp2(v);

 end;

 function vp5(v:double):double;

 begin

    result:=vp4(v)/2+3*vp3(v);

 end;

 function ut(u,v,h:double):double;

 begin

    result:=u+h*v+sqr(h)/2*vp1(v)+power(h,3)/6*vp2(v)+power(h,4)/24*vp3(v)+

       power(h,5)/120*vp4(v);

 end;

 function vt(v,h:double):double;

 begin

    result:=v+h*vp1(v)+sqr(h)/2*vp2(v)+power(h,3)/6*vp3(v)+power(h,4)/24*vp4(v)

       +power(h,5)/120*vp5(v);

 end;

var h,v0,v1,v2,u0,u1,u2,pu,cu,pv,cv,x,z1,z2:double; i,k:word;

    mas:array[0..$ffff] of double;

begin

   h:=-0.1;

   x:=1.3;

   while true do begin

      i:=1;

      u1:=1;

      v1:=-0.79159;

      u2:=ut(u1,v1,h);

      v2:=vt(v1,h);

      mas[0]:=u2;

      repeat begin

         u0 := u1;

         v0 := v1;

         v1 := v2;

         u1 := u2;

         if x<1 then break;

         x:=1.3+i*h;

         z1:=v1/2-3*u1-2*sqr(x-h);

         pu:= u0 + 2*h*v1;

         pv:= v0 + 2*h*z1;

         z2:=pv/2-3*pu-2*sqr(x);

         cv:=v1+h/2*(z1+z2);

         v2:=cv+(pv-cv)/5;

         cu:=u1+h/2*(v1+v2);

         u2:=cu+(pu-cu)/5;

         mas[i]:=u2;

         inc(i);

      end;

      until abs(pu-cu)>eps;

      if not(x<1) then begin

         h:=h/2;

         continue;

      end;

      break;

   end;

   for k:=0 to i-2 do write(1.3+k*h:4:6,'  ',mas[k]:4:6);

   readln;

end.

Результат роботи програми


Приклад пакетної реалізації поставленої задачі

Для пакетної реалізації поставленої задачі було використано математичний пакет Maple. Результати роботи математичного пакету:

> sys1 := [diff(y(x),x,x)-diff(y(x),x)/2+3*y(x)=2*x*x,y(1.3)=1,y(1)-2*D(y)(1)=0.6];

> sol1 := dsolve(sys1,numeric);

>with (plots):

> array_:=[[1.300000,1],[1.275000,0.9973],[1.250000,0.9948],[1.225000,0.9924],[1.200000,0.9901],[1.175000,0.9878],[1.150000,0.9853],[1.125000,0.9827],[1.100000,0.9799],[1.075000,0.9767],[1.050000,0.9733],[1.025000,0.9694],[1.000000,0.9651]];

display(odeplot(sol1,color=blue),plot(array_,color=red));

Висновок з отриманих розв’язків

У даній лабораторній роботі розглянуто метод метод прогнозу і корекції. Алгоритм реалізований на мові програмування Delphi Також наведені результати пакетного вирішення завдання за допомогою математичного пакету Maple.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
99 Kb
Скачали:
0