МІНІСТЕРСТВО ОСВІТИ І НАУКИ, МОЛОДІ ТА СПОРТУ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ „ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра АСУ
Звіт
Лабораторна робота № 8
«Розв’язування задачі Коші методом Рунге-Кутта»
з дисципліни:
«Чисельні методи»
Варіант №9
Мета роботи: вивчити і засвоїти постановку та методи розв’язування задачі Коші. Навчитися досліджувати розв’язок , використовуючи метод Рунге-Кутта.
Порядок роботи:
Попереднє опрацювання теоретичного матеріалу.
Отримання допуску до виконання лабораторної роботи.
Опрацювання типового навчального завдання (прикладів).
Створення проекту для виконання індивідуального завдання.
Оформити звіт для захисту лабораторної роботи за зразком:
назва роботи;
мета роботи;
короткі теоретичні відомості;
алгоритм розв’язування задачі;
тексти відповідних модулів проекту;
аналіз отриманих результатів та висновки.
6. Захист лабораторної роботи.
Завдання
Застосовуючи чисельнi методи розв’язування задачi Кошi, розв’язати диференцiйне рiвняння першого порядку з точнiстю є =0.0001 на відрiзку із кроком h= 0.05 i заданими початковими умовами , а також порівняти отриманий розв’язок із точним розв’язком y*, використовуючи правило Рунге.
Код програми
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <locale>
#define H 0.05
#define E 2.71828
using namespace std;
double msy[11];
double F (double x, double y)
{
return у*(2*х*х-у*у)/2*х*х*х;
}
void SetK (double& k1, double& k2, double& k3, double& k4, double x, int i)
{
k1=H*F(x, msy[i-1]);
k2=H*F(x+H/2, msy[i-1]+k1/2);
k3=H*F(x+H/2, msy[i-1]+k2/2);
k4=H*F(x+H, msy[i-1]+k3);
}
void main ()
{
setlocale (LC_ALL, "");
double k1, k2, k3, k4, x=0, yt;
msy[2]=2;
cout<<" X Точне значення Наближене значення Точнiсть"<<endl<<endl;
printf ("%3.2f\t%f\t%f\t%f\n\n", x, msy[0],0,0);
for (int i=1; i<(0.5/H+1); i++){
SetK (k1, k2, k3, k4, x, i);
msy[i]=msy[i-1]+(1.0/6.0)*(k1+2*k2+2*k3+k4);
x+=H;
yt=х/sqrt(log(x/2)+1); //це є функція у*
printf ("%3.2f\t%f\t%f\t%e\n\n", x, msy[i], yt, abs(msy[i]-yt));
}
cin.get();
}
Приклад виконання програми
Висновок: на даній роботі була створена програма розв’язування задачі Коші методом Рунге-Кутта. На скріншоті виконання програми проілюстровані отримані результати. Даний приклад демонструє розв’язання вказаної у завданні задачі Коші методом Рунге-Кутта на інтервалі х є [0, 0.5] з кроком h=0.05. Перший рядок таблийці ілюструє початкову умову: х=0, у=0.4. Як видно по стовбцях 2 і 3, які містять наближене значення обчислень методом Рунге-Кутта і точне значення, вони рівні до шести знаків після коми, а отже умова почності є = 0.0001 виконується. З четвертого рядка, який вказує точність обчислення видно, що точність обчислень на даному проміжку рівна є = 10-8, аналізуючи зміну точності обчислення видно, що точність з кожним кроком падає. Наприклад точність для: х1=0.05, точність=1.120*10-8; х6=0.3, точність=5.279*10-8; x10=0.5 точність=7.306*10-8. Таким чином видно, що даний метод має високу точність обчислення, яка залежить від обраної формули Рунге-Кутта і падає з кожною новою ітерацією у залежності від кроку (віддалення від початкової позиції).