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



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


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 .



Заменяя в уравнении (1) производную разностным отношением, получим y1y0h=f(x0,y0) . Перепишем последнее уравнение в виде



y1=y0+h·f(x0,y0) Повторяя этот процесс, получим приближенное решение задачи (1)-(2).



Таким образом, итерационная формула метода Эйлера имеет вид



xi+1=a+i·h, yi+1=yi+h·f(xi,yi), i=0,1,,n



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



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 Y[(int)n];
        X[0]=a; Y[0]=2;
        for(int i=1; i<=n; i++){
                X[i]=a+i*h;
                Y[i]=Y[i-1]+h*F(X[i-1],Y[i-1]);
        }
        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;
}



Результат:




X[0]=0 X[1]=0.1 X[2]=0.2 X[3]=0.3 X[4]=0.4 X[5]=0.5 X[6]=0.6 X[7]=0.7 X[8]=0.8 X[9]=0.9 X[10]=1
Y[0]=2 Y[1]=1.77296 Y[2]=1.66494 Y[3]=1.62879 Y[4]=1.62407 Y[5]=1.63217 Y[6]=1.64544 Y[7]=1.66082 Y[8]=1.6771 Y[9]=1.6938 Y[10]=1.71074


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