- •О. О. Абакумова «Обчислювальна математика-2»
- •Теоретичні відомості
- •Метод простої ітерації
- •Метод Гауса
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Метод бісекції
- •Метод Ньютона (метод дотичних) Для уточнення наближеного розв’язку рівняння зручно використовуватиметод Ньютона, який також називають методом дотичних.
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості.
- •Метод простої ітерації
- •Метод Ньютона
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Метод Ейлера
- •Метод Ейлера з уточненням
- •Зразок виконання завдання
- •Приклади програм
- •Контрольні питання
- •Теоретичні відомості
- •Зразок виконання завдання
- •Приклад програми
- •Контрольні питання
- •Теоретичні відомості.
- •Метод золотого перетину
- •Зразок виконання завдання
- •Приклад програми
- •Контрольні питання
Зразок виконання завдання
Завдання: 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();
}