Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка_ОМ2_edit.doc
Скачиваний:
13
Добавлен:
17.03.2016
Размер:
2.67 Mб
Скачать

Зразок виконання завдання

Завдання: 1) Методом Ейлера скласти розв’язок задачі Коші для звичайного диференційного рівняння на відрізку [0; 1] з кроком h=0.2 за початкових умов . Всі обчислення виконувати з чотирма десятковими знаками.

Розв’язання:

Розрахункові формули методу Ейлера матимуть вигляд:

Результати обчислень заносимо до таблиці:

0

0

1

1

0.2

0.8919

2

0.4

0.8061

3

0.6

0.7455

4

0.8

0.7115

5

1

0.7035

Побудуємо графік знайденого розв’язку (рис. 8):

Рис. 8. Графічний розв’язок задачі Коші

2) Методом Ейлера з уточненням скласти розв’язок задачі Коші для звичайного диференційного рівняння на відрізку [0; 1] з кроком h=0.2 за початкових умов . Всі обчислення виконувати з чотирма десятковими знаками.

Розв’язання:

Розрахункові формули методу Ейлера з уточненням матимуть вигляд:

Результати обчислень заносимо до таблиці:

0

0

1

1

0.2

0.9030

2

0.4

0.8316

3

0.6

0.7882

4

0.8

0.7734

5

1

0.7862

Побудуємо графік знайденого розв’язку (рис. 9):

Рис. 9. Графічний розв’язок задачі Коші

Приклади програм

// 1) Розв’язання задачі Коші для звичайного диференційного рівняння першого порядку методом Ейлера

#include <iostream>

#include <cmath>

#include <conio.h>

using namespace std;

void main()

{

float a, b, h, n;

int i, k, punkt=0;

float X[100], Y[100], F[100];

do{

cout<<endl<<"ZDR. Metod Eilera."<<endl;

cout<<"y'=sin(x)-cos(y)"<<endl<<endl;

cout<<"1) Obchuslutu zi standartnumu znachenyamu a, b, h"<<endl;

cout<<"2) Vvestu znachenya a, b, h."<<endl;

cout<<"3) Vuhid."<<endl;

cin>>punkt;

if (punkt==1)

{

clrscr();

a=0;

b=1;

X[0]=0;

Y[0]=1;

h=0.2;

n=(b-a)/h;

cout<<endl<<"Metod Eilera:"<<endl<<endl;

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

{

X[i+1]=X[i]+h;

Y[i+1]=Y[i]+h*(sin(X[i])-cos(Y[i]));

cout<<X[i]<<'\t'<<Y[i]<<endl;

}

getch();

}

if (punkt==2)

{

clrscr();

cout<<"Vvedit pochatok vidrizku [a;b]: a=";

cin>>a;

cout<<"Vvedit kinets vidrizku [a;b]: b=";

cin>>b;

cout<<"Vvedit krok h=";

cin>>h;

cout<<"Pochatkova umova: y("<<a<<")=";

cin>>Y[0];

X[0]=a;

n=(b-a)/h;

cout<<endl<<"Metod Eilera:"<<endl;

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

{

X[i+1]=X[i]+h;

Y[i+1]=Y[i]+h*(sin(X[i])-cos(Y[i]));

cout<<X[i]<<'\t'<<Y[i]<<endl;

}

getch();

}

if (punkt==3)

{

exit(1);

}

}while(punkt!=3);

getch();

}

// 2) Розв’язання задачі Коші для звичайного диференційного рівняння першого порядку методом Ейлера з уточненням

#include <iostream>

#include <cmath>

#include <conio.h>

using namespace std;

void main()

{

float a, b, h, n;

int i, k, punkt=0;

float X[100], Y[100], F[100];

do{

cout<<endl<<endl<<endl<<"ZDR. Metod Eilera z utochnenyam."<<endl;

cout<<"y'=sin(x)-cos(y)"<<endl<<endl;

cout<<"1) Obchuslutu zi standartnumu znachenyamu a, b, h"<<endl;

cout<<"2) Vvestu znachenya a, b, h."<<endl;

cout<<"3) Vuhid."<<endl<<endl;

cin>>punkt;

if (punkt==1)

{

clrscr();

a=0;

b=1;

X[0]=0;

Y[0]=1;

h=0.2;

n=(b-a)/h;

cout<<endl<<"Metod Eilera z utochnenyam:"<<endl<<endl;

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

{

X[i+1]=X[i]+h;

Y[i+1]=Y[i]+h/2*(sin(X[i])-cos(Y[i])+sin(X[i+1])-cos(Y[i]+

h*(sin(X[i])-cos(Y[i]))));

cout<<X[i]<<'\t'<<Y[i]<<endl;

}

getch();

}

if (punkt==2)

{

clrscr();

cout<<"Vvedit pochatok vidrizku [a;b]: a=";

cin>>a;

cout<<"Vvedit kinets vidrizku [a;b]: b=";

cin>>b;

cout<<"Vvedit krok h=";

cin>>h;

cout<<"Pochatkova umova: y("<<a<<")=";

cin>>Y[0];

X[0]=a;

n=(b-a)/h;

cout<<endl<<"Metod Eilera z utochnenyam:"<<endl;

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

{

X[i+1]=X[i]+h;

Y[i+1]=Y[i]+h/2*(sin(X[i])-cos(Y[i])+sin(X[i+1])-cos(Y[i]+

h*(sin(X[i])-cos(Y[i]))));

cout<<X[i]<<'\t'<<Y[i]<<endl;

}

getch();

}

if (punkt==3)

{

exit(1);

}

}while(punkt!=3);

getch();

}