50946

Екстраполяційний метод Адамса розвязання задачі Коші

Лабораторная работа

Информатика, кибернетика и программирование

Мета. Навчитися знаходити розвязок диференційного рівняння екстраполяційним методом Адамса. Устаткування: папір формату А4, ручка, калькулятор, ПЗ С ++. Хід роботи Правила техніки безпеки Теоретичні дані Індивідуальне завдання. Використовуючи метод Адамса з трьома кінцевими різницями, скласти таблицю наближених значень інтеграла диференційного рівняння, з початковими умовами на відрізку з точністю 0,001. Початковий відрізок встановити методом Рунге-Кутта.

Украинкский

2014-02-02

41 KB

5 чел.

Лабораторна робота №28

Тема. Екстраполяційний метод Адамса розвязання задачі Коші.

Мета. Навчитися знаходити розв’язок диференційного рівняння екстраполяційним методом Адамса.

Устаткування: папір формату А4, ручка, калькулятор, ПЗ  С ++.

Хід роботи

  1.  Правила техніки безпеки
  2.  Теоретичні дані

      Індивідуальне завдання.

Використовуючи метод Адамса з трьома кінцевими різницями, скласти таблицю наближених  значень інтеграла диференційного рівняння , з початковими умовами на відрізку  з точністю 0,001. Початковий відрізок встановити методом Рунге-Кутта.

12)

#include<iostream.h>

#include<math.h>

double f (double x, double y)

{return cos(y)/(1.25+x)-0.1*y*y;}

int i,j;

double h;

double x[20]; 

double y[20];

double dy[20];

double k[20][20];

double q[20][20];

void q_f()

{

int fi,fj;

for(fi=0;fi<20;fi++)

{q[0][fi]=h*f(x[fi],y[fi]);}

for(fj=1;fj<20;fj++)

{for(fi=0;fi<20;fi++){q[fj][fi]=q[fj-1][fi+1]-q[fj-1][fi];}}}

void main()

{cout<<"Input x[0] = ";

cin>>x[0];

cout<<"Input y[0] = ";

cin>>y[0];

cout<<"Input step h = ";

cin>>h;

for(i=0;x[i]<=1;i++){ x[i+1] =x[i]+h;}

int i_max=i;

for(i=0;i<3;i++)

{  k[0][i]=h*f(x[i],y[i]);

 k[1][i]=h*f((x[i]+h/2),(y[i]+k[0][i]/2));

 k[2][i]=h*f((x[i]+h/2),(y[i]+k[1][i]/2));

 k[3][i]=h*f((x[i]+h),(y[i]+k[2][i]));

 dy[i]=(k[0][i]+2*k[1][i]+2*k[2][i]+k[3][i])/6;

 y[i+1] =y[i]+dy[i];

 x[i+1] =x[i]+h;}

for(i=0;i<i_max;i++)

{q_f();

dy[i]=q[0][i]+.5*q[1][i-1]+(5/12)*q[2][i-2]+(3/8)*q[3][i-3];

y[i+1] =y[i]+dy[i];

x[i+1] =x[i]+h;

cout<<i<<"  "<<x[i];}

for(i=0;i<i_max;i++)

{ cout<<"\nx["<<i<<"] = "<<x[i]<<"        y["<<i<<"] = "<<y[i];}}

  1.  Контрольні питання
  •  Для якої задачі використовується метод Адамса?
  •  Які формули методу Адамса?
  •  Як знайти початковий відрізок?
  •  Що являється результатом рішення задачі методом Адамса?
  •  Як оцінити похибку метода на практиці?