Головна Головна -> Інше українською -> Інформатика, комп'ютери, програмування -> Розв’язування диференціальних рівнянь

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

Назва:
Розв’язування диференціальних рівнянь
Тип:
Інше
Мова:
Українська
Розмiр:
2,95 KB
Завантажень:
105
Оцінка:
 
поточна оцінка 5.0


Скачати цю роботу безкоштовно
Пролистати роботу: 1  2  3 
Лабораторна робота
Тема:
 
Розв’язування
диференціальних рівнянь


Мета роботи: Вивчення методів розв’язування диференціальних рівнянь та
засобiв мови Сi для програмування процедур, оволодiння прийомами складання алгоритмiв i програм з пiдпрограмами.
Завдання:

вар. | Диференційне рівняння |
Початкові умови | Проміжок інтегрування | Крок інтегрування
15 | y’+4y=6х2+1 | y(0)=1 | [0;1.5] | 0.1
Короткі теоретичні відомості:
Розв’язування диференціального рівняння
Постановка задачі (задача Коші) має вигляд диференціального рівняння з початковими умовами
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.
Ідентифікація змінних:
Змінна | a |
b | Крок | y0 |
y’ | Номер
елементу
Ідентифікатор | a | b | h | y0 | y_ | func(x,у) | і
Програма:
#include<math.h>
/*Глобальнi змiннi*/
const float a=0,b=1.5,h=0.1,y0=1;
float func(float,float);
/*Функцiя*/
float func(float x,float y)
{
float y_;
y_=6*pow(x,2)+1-4*y;
return y_;
}
/*Головна програма*/
main()
{
ejler();
ejler_p();
ejler_k();
runge_k();
}
/*Метод Ейлера*/
ejler()
{
int i=0;
float x,y=y0;
clrscr();
printf("Метод Ейлера\n");
for(x=a;x<=b+h;x+=h)
{
printf("x[%i]=%.1f >>> y[%i]=%.4f\n",i,x,i,y);
y+=h*func(x,y);
i++;
}
getch();
return;
}
/*Метод Ейлера покращений*/
ejler_p()
{
int i=0;
float x,y=y0,yp;
clrscr();
printf("Метод Ейлера покращений\n");
for(x=a;x<=b+h;x+=h)
{
printf("x[%i]=%.

Завантажити цю роботу безкоштовно
Пролистати роботу: 1  2  3 



Інше на тему: Розв’язування диференціальних рівнянь

BR.com.ua © 1999-2017 | Реклама на сайті | Умови використання | Зворотній зв'язок