Розв’язок задачі Коші для диференціального рівняння першого порядку з точністю 0,00001, використовуючи метод Рунге-Кутта 4-го порядку (Лабораторна робота № 7)

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

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

Татарченко Аліна ІН‑91

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

Варіант 10

1.  Умова задачи.

Чисельно розв’язати задачу Коші для диференціального рівняння  першого порядку з точністю =0,00001, використовуючи метод Рунге- Кутта  4-го порядку.

2.  Математичне обґрунтування алгоритму розв’язання задачи.

Якщо  неперервна і обмежена разом зі своїми четвертими похідними, то використовують метод четвертого порядку (метод Рунге-Кутта). Він описується системою таких п’яти співвідношень:

     ( ).

Обчислювальна схема (алгоритм) методу Рунге-Кутта:

1  вибираємо початковий крок h на відрізку [a,b], задаємо точність  ;

2  складаємо множину рівновіддалених точок (вузлів):                  ;

3  визначаємо розв’язки   yi+1  за формулами при кроці h і при кроці h/2, 0 ≤ i ≤ n-1;

4  перевіряємо нерівність ;

5  якщо ця нерівність виконується, то беремо  і продовжуємо обчислення  з тим самим кроком, якщо ні, то зменшуємо початковий крок h у два рази і переходимо до пункту 3.

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

#include<stdio.h>

#include<conio.h>

#include<math.h>

#define m 200

float f(float x,float y);

void main()

{float yh[200],y[200],h=0.1,h2,a1=0,b1=1,a,c,y0=0,k1,k2,k3,k4,e,x[m];

 int i,n,n2,l;

 clrscr();

 do{

 l=1;

  n=(b1-a1)/h;

 for(i=0;i<=n+1;i++)

  x[i]=a1+i*h;

  y[0]=y0;

 for(i=1;i<=n+1;i++)

 {  k1=f(x[i-1],y[i-1]);

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

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

  k4=f(x[i-1]+h,y[i-1]+h*k3);

  y[i]=y[i-1]+h/6*(k1+2*k2+2*k3+k4);

 }

 h2=h/2;

  n2=(b1-a1)/h2;

 for(i=0;i<=n2+1;i++)

  x[i]=a1+i*h2;

  yh[0]=y0;

 for(i=1;i<=n2+1;i++)

 {  k1=f(x[i-1],yh[i-1]);

  k2=f(x[i-1]+h2/2,yh[i-1]+h2/2*k1);

  k3=f(x[i-1]+h2/2,yh[i-1]+h2/2*k2);

  k4=f(x[i-1]+h2,yh[i-1]+h2*k3);

  yh[i]=yh[i-1]+h2/6*(k1+2*k2+2*k3+k4);

 } }

while(l==0);

 for(i=0;i<=n2+1;i++)

   printf("x=%.2f\ty=%f\n",x[i],yh[i]);

 getch();

 }

float f(float x,float y)

{

  return 1+0.4*y*sin(x)-1.5*y*y;

}

4.  Пакетна реалізація.

Дану задачу можна вирішити за допомогою пакету Maple:

> eq:=diff(y(x),x)=1+0.4*y(x)*sin(x)-1.5*y(x)^2;

> cond:=y(0)=0;

> de:=dsolve({eq,cond},y(x),numeric);

> de(1);

5.  Висновки.

Програмний і пакетний розв’язки  системи збігаються, отже метод Рунге- Кутта  4-го порядку можна застосувати до даної задачі.

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

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

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