См. также метод Эйлера на С++



Будем рассматривать дифференциальное уравнение вида

y'=f(x,y), (1)



где f(x,y) — заданная непрерывная функция в области D.



Задача нахождения решения этого уравнения, удовлетворяющего начальному условию



(x0)=y0, (2)



называется задачей Коши.



Метод Эйлера-Коши



Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].



Разобьем отрезок [a,b] на n равных частей точками 



xi=a+i·h , где i=0,1,,n,h=ban



Метод Эйлера-Коши позволяет увеличить точность метода Эйлера. Расчетные формулы этого метода имеют вид



xi+1=a+i·h, yi+1=yi+hf(xi,yi) yi+1=yi+hf(xi,yi)+f(xi+1,yi+1)2.



Пример. Решить методом Эйлера-Коши дифференциальное уравнение



y'=3sin2y+x с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.



Решение.




#include <iostream>
#include <cmath>
using namespace std;

double F(double x, double y){
return 3*sin(2*y)+x;
}

int main() {
double a=0; double b=1; double h=0.1;
double n=(b-a)/h;
double X[(int)n];
double Y1[(int)n];
double Y[(int)n];
//calculate
X[0]=a; Y[0]=2;
for(int i=1; i<=n; i++){
X[i]=a+i*h;
Y1[i]=Y[i-1]+h*F(X[i-1],Y[i-1]);
Y[i]=Y[i-1]+h*(F(X[i-1],Y[i-1])+F(X[i],Y1[i]))/2.0;
}
//print results
for(int i=0; i<=n; i++){
cout << "X["<<i<<"]="<<X[i] <<" ";
}
cout << endl;
for(int i=0; i<=n; i++){
cout << "Y["<<i<<"]="<<Y[i] << " ";
}
return 0;
}




 



См. также метод Эйлера на С++