Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ІКТА, кафедра “Захист інформації”
Звіт
з ЛАБОРАТОРНої РОБОТи № 6
З КУРСУ “Комп’ютерні методи досліджень”
НА ТЕМУ:
“ МЕТОДИ ЧИСЕЛЬНОГО РОЗВЯЗУВАННЯ
диференціальних рівнянь”
Варіант 12
виконав:
ст. гр. ІБ-2
Львів – 2007
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Розв’язати чисельним методом звичайне диференційне рівняння.
Короткі теоретичні відомості
Модифікований метод Ейлера
В модифікованому методі Ейлера (метод Ейлера з перерахунком) спочатку обчислюється значення функції в наступній точці за звичайним методом Ейлера.
EMBED Equation.3 (9)
Воно використовується для обчислення наближеного значення похідної в кінці інтервалу EMBED Equation.3.
Обчисливши середнє між цим значенням похідної та її значенням на початку інтервалу, знайдемо більш точне значення EMBED Equation.3:
EMBED Equation.3 (10)
Цей прийом ілюструється на рисунку.
EMBED Visio.Drawing.11
В обчислювальній практиці використовується також метод Ейлера-Коші з ітераціями:
знаходиться грубе початкове наближення (за звичайним методом Ейлера)
EMBED Equation.3
будується ітераційний процес
EMBED Equation.3 (14)
Ітерації продовжують до тих пір, доки два послідовні наближення не співпадуть з заданою похибкою EMBED Equation.3. Якщо після декількох ітерацій співпадіння нема, то потрібно зменшити крок EMBED Equation.3.
EMBED Equation.3
Тобто в модифікованому методі Ейлера, в методі Ейлера-Коші з ітераціями спочатку (на першому етапі) знаходиться наближення для EMBED Equation.3, а потім воно вже коригується за формулами (10) або (14).
Блок-схема
SHAPE I=0,4
I=i+1
k[i]=pow(y0,2)+y0*pow(x0,3);
x0=x+h/2;
y0=y+h*k[i]/2;}
yz=y;
y+=h*(k[0]+2*k[1]+2*k[2]+k[3])/6;
x+=n;
|yz-y|>e
Таблиця ідентифікаторів констант, змінних, функцій, використаних у блок-схемі алгоритму і програмі, та їх пояснення:
hКрокe похибкаpow Функція піднесення до степеняFabs Модуль числаmain()Головна функція
Текст програми мовою C
# include <stdio.h>
# include <conio.h>
# include <math.h>
main ()
{ double x=0,y=0,k[4],h=0.00001,xv,yv,yz,e=0.0001;
int i;
do{ for(i=0;i<4;i++)
{ k[i]=sqrt(xv*xv+yv*yv)+sin(xv+2*yv);
xv=x+h/2;
yv=y+h*k[i]/2;
}
yz=y;
y+=h*(k[0]+2*k[1]+2*k[2]+k[3])/6;
x+=h;
} while (fabs(yz-y)>e);
printf("rozvjazok:\nx=%lf\ny=%lf\n",x,y);
getch ();}
Результати роботи програми:
rozvjazok duf rivnannja:
x=0.00001 ; y=0.00000 ;
Висновок: На цій лабораторній роботі я ознайомився з методами чисельного числення розв’язування диференціальних рівнянь.