НИЖЕГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. Р.Е.АЛЕКСЕЕВА
Кафедра «Численные методы решения обыкновенного дифференциального уравнения»
Дисциплина «Информатика»
Лабораторная работа№8
Вариант№23
Выполнил: Федоров К.Р. Группа 19-Э-5 Проверил: Лапшин И.В.
Нижний Новгород
2020
Постановка задания:
Блок схема:
Метод Эйлера простой
С++ :
Метод Эйлера простой
#include <iostream> #include <iomanip> #include <math.h> using namespace std;
double F(double x, double y, double z)
{
return ((-2 * z - y) / (4 * x));
}
int main()
{
double x0 = 1, y0 = 1.381, z0 = -0.15, x, y, z, x1, y1, z1, h, a = 1, b = 2; int n = 5;
cout << setw(10) << "x" << setw(10) << "y" << setw(10) << "z" << endl; cout << "_______________________________" << endl;
h = (b - a) / n; while (x0 < b)
{
cout << setw(10) << x0 << setw(10) << y0 << setw(10) << z0 << endl;
x1 = x0 + h;
y1 = y0 + h * z0;
z1 = z0 + h * F(x0, y0, z0);
x0 = x1;
y0 = y1;
z0 = z1;
}
return 0;
}
Блок-схема
Метод Эйлера центрированный
С++
Метод Эйлера центрированный
#include <iostream> #include <iomanip> #include <math.h> using namespace std;
double F(double x, double y, double z)
{
return ((-2 * z - y) / (4 * x));
}
int main()
{
double x0 = 1, y0 = 1.381, z0 = -0.15, x, y, z, x1, y1, z1, xp, h, a = 1, b = 2; int n = 5;
cout << setw(10) << "x" << setw(10) << "y" << setw(10) << "z" << endl; cout << "_______________________________" << endl;
h = (b - a) / n; x = x0;
while (x0 < b)
{
cout << setw(10) << x0 << setw(10) << y0 << setw(10) << z0 << endl;
x1 = x0 + h;
y1 = y0 + h * (z0 + h * ((F(x0, y0, z0)) / 2));
z1 = z0 + h * F(x0 + h / 2, y0 + h * z0 / 2, z0 + h * F(x0, y0, z0) / 2); x0 = x1;
y0 = y1;
z0 = z1;
}
return 0;
}
Блок-схема
Метод Эйлера усредненный
С++
Метод Эйлера усредненный
#include <iostream> #include <iomanip> #include <math.h> using namespace std;
double F(double x, double y, double z)
{
return (((-2 * z) - y) / (4 * x));
}
int main()
{
double x0 = 1, y0 = 1.381, z0 = -0.15, x, y, z, x1, y1, z1, xp, h, a = 1, b = 2; int n = 5;
cout << setw(10) << "x" << setw(10) << "y" << setw(10) << "z" << endl; cout << "_______________________________" << endl;
h = (b - a) / n; x = x0;
while (x0 < b)
{
cout << setw(10) << x0 << setw(10) << y0 << setw(10) << z0 << endl;
x1 = x0 + h;
y1 = y0 + h * ((z0 + (z0 + h * F(x0, y0, z0))) / 2);
z1 = z0 + h * ((F(x0, y0, z0) + F(x0 + h, y0 + h * z0, z0 + h * F(x0, y0,
z0))) / 2);
x0 = x1;
y0 = y1;
z0 = z1;
}
return 0;
}
Блок-схема
Метод Эйлера правого края
С++
Метод Эйлера правого края
#include <iostream> #include <iomanip> #include <math.h> using namespace std;
double F(double x, double y, double z)
{
return ((-2 * z - y) / (4 * x));
}
int main()
{
double x0 = 1, y0 = 1.381, z0 = -0.15, x, y, z, x1, y1, z1, xp, h, a = 1, b = 2; int n = 5;
cout << setw(10) << "x" << setw(10) << "y" << setw(10) << "z" << endl; cout << "_______________________________" << endl;
h = (b - a) / n; x = x0;
while (x0 < b)
{
cout << setw(10) << x0 << setw(10) << y0 << setw(10) << z0 << endl;
x1 = x0 + h;
y1 = y0 + h * (z0 + h * F(x0, y0, z0));
z1 = z0 + h * F(x1, y0 + h * z0, z0 + h * F(x0, y0, z0)); x0 = x1;
y0 = y1;
z0 = z1;
}
return 0;
}