Программа для решения дифференциальных уравнений методом эйлера

IT Novella

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

f ( x , y ) — заданная непрерывная функция в области D. Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

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

Метод Эйлера

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

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

i = 0 , 1 , … , n , h = b − a n .

Заменяя в уравнении (1) производную разностным отношением, получим y 1 − y 0 h = f ( x 0 , y 0 ) . Перепишем последнее уравнение в виде

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

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

x i + 1 = a + i · h , y i + 1 = y i + h · f ( x i , y i ) , i = 0 , 1 , … , n

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

y ‘ = 3 s i n 2 y + x

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

Метод Эйлера для решения дифференциального уравнения

Дано дифференциальное уравнение dy / dx = f (x, y) с начальным условием y (x0) = y0. Найти его приближенное решение, используя метод Эйлера .

Метод Эйлера:
В математике и вычислительной науке метод Эйлера (также называется вперед
Метод Эйлера) — числовая процедура первого порядка для решения обыкновенного дифференциала
уравнения (ОДУ) с заданным начальным значением.
Рассмотрим дифференциальное уравнение dy / dx = f (x, y) с начальным условием y (x0) = y0
тогда последовательная аппроксимация этого уравнения может быть задана как:

where h = (x(n) – x(0)) / n
h indicates step size. Choosing smaller
values of h leads to more accurate results
and more computation time.

Пример :

/ * Программа CPP, чтобы найти приближение

обыкновенного дифференциального уравнения

используя метод Эйлера. * /

using namespace std;

// Рассмотрим дифференциальное уравнение
// dy / dx = (x + y + xy)

float func( float x, float y)

return (x + y + x * y);

// Функция для формулы Эйлера

void euler( float x0, float y, float h, float x)

Поиск численных решений ОДУ (методы Эйлера, Эйлера-Коши и Рунге – Кутты ) C++

Лабораторная работа по нахождению численных решений ОДУ тремя методами: Эйлера, Эйлера-Коши и Рунге-Кутты. В архиве представлена постановка задачи, блок схемы реализации методов, коды программ трёх методов на C++, а так же подведён итог проделанной работы.

Фрагменты из архива:

Найти приближенное решение ОДУ y’= x^3 + y^3 при заданном начальном условии y(0) = 0 в трех узлах на отрезке [0,1] с шагом h = 0.3 методами Эйлера, Эйлера-Коши и Рунге – Кутты.

#include «stdafx.h»
#include
#include
#include

typedef double typeOfFloat;

typeOfFloat f( typeOfFloat x, typeOfFloat y );

typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n );

typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E );

typeOfFloat a,b;
typeOfFloat h;
typeOfFloat e;
typeOfFloat y0;

using namespace std;

printf(«Input b: «);
cin >> b;

printf(«Input h: «);
cin >> h;

printf(«Input e: «);
cin >> e;

printf(«Input y0: «);
cin >> y0;

cout E; k++ )
<
prS = s;

// Найти интеграл функции f(x,y) на [a,b] при разбиении на n отрезков методом левых прямоугольников
typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n )
<

typeOfFloat x, xb, dx;
typeOfFloat s = 0;

for ( int i = 0; i
#include
#include

typedef double typeOfFloat;

typeOfFloat f( typeOfFloat x, typeOfFloat y );

typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n );

typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E );

typeOfFloat a,b,y3;
typeOfFloat h;
typeOfFloat e;
typeOfFloat y0;
typeOfFloat Y;

using namespace std;

printf(«Input b: «);
cin >> b;

printf(«Input h: «);
cin >> h;

printf(«Input e: «);
cin >> e;

printf(«Input y0: «);
cin >> y0;

cout E; k++ )
<
prS = s;

// Найти интеграл функции f(x,y) на [a,b] при разбиении на n отрезков методом трапеций
typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n )
<

typeOfFloat x,dx;
typeOfFloat s = 0;
typeOfFloat a1,b1;

a1 = a;
b1 = a + dx;

for ( int i = 0; i
#include
#include

typedef double typeOfFloat;

typeOfFloat f( typeOfFloat x, typeOfFloat y );

int _tmain(int argc, _TCHAR* argv[])
<

using namespace std;

typeOfFloat a,b,y0,h,e,y,y1,y2,H,y3;
typeOfFloat k1,k2,k3,k4,x ;
typeOfFloat k11,k22,k33,k44;

printf(«Input a «);
cin >> a;

printf(«Input b «);
cin >> b;

printf(«Input h «);
cin >> h;

printf(«Input e «);
cin >> e;

printf(«Input y0 «);
cin >> y0;

for( x = a + h ; x e)
<
y1 = y2;

H = h/n;
for( int i = 0; i Похожие материалы:


источники:

http://espressocode.top/euler-method-solving-differential-equation/

http://fevt.ru/load/reshenij_odu/18-1-0-130

[ —>Скачать с сервера (110.5 Kb) — бесплатно]22.11.2009, 22:40