
Добавил:
draingang
t.me
я просто люблю помогать людям
gym a.k.a regym. S 2021 NA VE4NO
♡♡♡
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <iostream>
#include <cmath>
double f(double x, double y)
{
return pow(y, 2)*cos(x);
};
double RFunction(double x, double y, double h, int m)
{
double k1, k2, k3, k4;
for (int k = 1; k <= m; k++)
{
k1 = f(x, y);
k2 = f(x + h / 2, y + h * k1 / 2);
k3 = f(x + h / 2, y + h * k2 / 2);
k4 = f(x + h, y + h * k3);
y = y + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4);
x = x + h;
}
return y;
}
void RungeKun(double x0, double y0, double h0, double eps, double b)
{
int n = (b - x0) / h0;
int m;
double h, y, y1, x;
std::cout << "\n\n\n[x0 = " << round(x0*10000)/10000 << "]\t[y0 = " << round(y0*10000)/10000 << "]\t\t[h0 = " << h0 << "]\n";
for (int k = 1; k <= n; k++)
{
h = h0;
m = 1;
y = RFunction(x0, y0, h, m);
do
{
y1 = y;
h = h / 2;
x = x0;
y = y0;
m = 2 * m;
y = RFunction(x0, y0, h, m);
}
while (fabs(y - y1) >= eps);
x0 = x0 + h0;
y0 = y;
std::cout << "[x0 = " << round(x0*10000)/10000 << "]\t[y0 = " << round(y0*10000)/10000 << "]\t\t[h = " << h << "]\t[m = " << m << "]\n";
}
}
int main()
{
double x0, y0, b, h;
std::cout<< "[x0] Задайте начальный x: ";
std::cin >> x0;
std::cout<< "[y0] Задайте начальный y: ";
std::cin >> y0;
std::cout<< "[b] Задайте конечную точку b: ";
std::cin >> b;
std::cout<< "[h] Задайте шаг разбиения: ";
std::cin >> h;
double eps = pow(10, -4);
RungeKun(x0, y0, h, eps, b);
}
Соседние файлы в папке ЛР-0005 (Методы решения обыкновенных дифференциальных уравнений)