У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент


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

Тема: Обчислення диференціальних рівнянь за допомогою підпрограми-функції

 

 

 

Мета

Навчитись обчислювати диференціальні рівняння за допомогою підпрограми функції.

Теоретичні відомості

Розв’язування диференціального рівняння

Постановка задачі (задача Коші) має вигляд диференціального рівняння з початковими умовами

yР = f(t,y), y = y0 при t = t0. t Є [a, b].

Для її наближеного розв’язання застосовуються так звані однокрокові методи: Ейлера, Ейлера покращений, Ейлера-Коші та Рунге-Кута. Їх суть полягає в тому, що діапазон інтегрування [a, b] ділять на n елементарних відрізків довжиною h. Значення шуканої функції в точці t0=a відомо з початкових умов, а її обчислення в першій і наступних точках аж до точки tn=b виконують за поданими нижче формулами. При цьому h=(b-a)/n, t0 = a, tn = b, ti+1 = ti+h, yi=f(ti), i=0,1,2, ... n.

Алгоритм розв’язування дифрівняння однокроковими методами представляє собою цикл з накопиченням суми.

Метод Ейлера найпростіший, але він має лише перший порядок точності. Геометрично метод представляє собою перехід у кожну наступну точку, починаючи з заданої початковими умовами, вздовж дотичної до точного розв’язку, проведеної з попередньої точки. Цей метод враховує кут нахилу дотичної до кривої точного розв’язку лише в одній крайній точці елементарного відрізка. Ілюстрація першого кроку переходу в точку t1 подана на рисунку 2, де y1* – точне значення шуканої функції в точці t1, e – похибка. Формула Ейлера має такий вигляд: yi+1=yi+hf(xi,yi).

Метод Ейлера покращений має другий порядок точності. На кожному кроці обчислювального процесу знаходять проміжні значення шуканої функції yiп посередині кожного i-го елементарного відрізка (на відстані пів-кроку, тобто при ti+h/2) за методом Ейлера, а проміжні значення використовують для переходу в наступну точку. Геометрично це означає перехід у кожну наступну точку вздовж дотичної, проведеної до кривої точного розв’язку в середній точці. Формули мають такий вигляд:

yiп = yi + hf(ti, yi)/2;

yi+1 = yi + hf(ti+h/2, yiп).

Метод Ейлера-Коші теж має другий порядок точності. Для переходу в кожну наступну точку враховується кут нахилу дотичної до кривої точного розв’язку в обох крайніх точках (тобто в точках ti i ti+1) кожного елементарного відрізка. Для переходу в кожну наступну точку використовують середнє арифметичне значення тангенсів кутів нахилу дотичних до кривої точного розв’язку (похідних) в крайніх точках. Тут теж обчислюють проміжні значення. Формули мають такий вигляд:

yiп = yi + hf(ti, yi);

yi+1 = yi + h[f(ti+h, yiп) + f(ti, yi)]/2.

Метод Рунге-Кутта має четвертий порядок точності. На кожному кроці циклічного обчислювального процесу знаходять допоміжні коефіцієнти a, b, c, d. Формули мають такий вигляд:

a = f(ti, yi);

b = f(ti+h/2, yi + ha/2);

c = f(ti+h/2, yi + hb/2);

d = f(ti+h, yi + hc);

yi+1 = yi + h(a + 2b + 2c + d)/6.

Завдання №8

y”-4y’+13y=26x+5, y(0)=11; y’(0)=0; a=0; b=2,7; h=0.1; n=2,7/

Розв’язання

f(x,y)=26x-13y*y/2-4y.

Програма

#include<stdio.h>

#include<math.h>

main()

{

float y=11,x=0,a=0,b=2.7,h=0.1,f(float,float),yi=0,m=0,n=0,c=0,d=0;

clrscr();

/*metod Ejlera*/

printf("metod Ejlera\n");

for(x=a+h;x<b;x+=h)

{

y=y+h*f(x,y);

printf("x=%f y=%f\n",x,y);

};

getch();

/* Ejlera pokraw4enyj */

printf("pokraw4enyj metod Ejlera\n");

y=11;

х=0;

for(x=a+h;x<b;x+=h)

{

yi=y+h*f(x,y)/2;

y=y+h*f(x+h/2,yi);

printf("x=%f y=%f\n",x,y);

};

getch();

/*metod Ejlkos */

printf("metod Ejlkos ");

y=11;

yi=0;

х=0;

for(x=a+h;x<b;x+=h)

{

yi=y+h*f(x,y);

y=y+h*(f(x+h,yi)+f(x,y))/2;

printf("x=%f y=%f\n",x,y);

};

getch();

/*metod Runge-Kutta*/

printf("metod Runge-Kutta");

y=11;

х=0;

for(x=a+h;x<b;x+=h)

{

m=f(x,y);

n=f(x+h/2,y+h*m/2);

c=f(x+h/2,y+h*n/2);

d=f(x+h,y+h*c);

y=y+h*(m+2*n+2*c+d)/6;

printf("x=%f y=%f",x,y);

};

getch();

}

float f(float x,float y)

{

return (26*x-(13*pow(y,2))/2-4*y);

}

Блок-схема

Результат виконання програми

метод Ейлера:

x=0,100000 y=-71,790001

x=0,200000 y=-3392,526855

x=0,300000 y=7483040,000000

x=0,400000 y=-363973312512000

x=0,500000 y=861097702709576611000000000.000000

метод Ейлера покращений:

x=0.100000 y=-576.958435

x=0.200000 y=-7672759808.000000

x=0.300000 y=-237950430497516093000000000000000000000.0

метод Ейлера-Коші:

x=0.100000 y=-1690.763428

x=0.200000 y=-1123351134208.000000

метод Рунге-Кутта:

x=0.100000 y=-599.867981

x=0.200000 y=-5939625984.000000

Висновок

На цій лабораторній роботі я навчився розв’язувати диференціальні рівняння чотирьма способами, а саме методами Ейлера, Ейлера-Коші та Рунге-Кутта за допомогою функцій.