Лабораторная работа по нахождению численных решений ОДУ тремя методами: Эйлера, Эйлера-Коши и Рунге-Кутты. В архиве представлена постановка задачи, блок схемы реализации методов, коды программ трёх методов на C++, а так же подведён итог проделанной работы.
Фрагменты из архива:
Постановка задачи:
Найти приближенное решение ОДУ y’= x^3 + y^3 при заданном начальном условии y(0) = 0 в трех узлах на отрезке [0,1] с шагом h = 0.3 методами Эйлера, Эйлера-Коши и Рунге – Кутты.
// Нахождение интеграла на участке от a до b с погрешностью E typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E ) {
typeOfFloat s; typeOfFloat prS = 0; int k;
prS = integral(a,b,y,2); s = integral(a,b,y,3);
for( k = 4; fabs( prS - s ) > E; k++ ) { prS = s;
s = integral(a,b,y,k);
}
return s; }
// Найти интеграл функции f(x,y) на [a,b] при разбиении на n отрезков методом левых прямоугольников typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n ) {
typeOfFloat x, xb, dx; typeOfFloat s = 0;
N=0; dx = (b - a)/n;
xb = a;
for ( int i = 0; i < n; i++ ) { x = xb + i*dx; s = s + f(x,y)*dx; N++; }
// Нахождение интеграла на участке от a до b с погрешностью E typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E ) {
typeOfFloat s; typeOfFloat prS = 0; int k;
prS = integral(a,b,y,2); s = integral(a,b,y,3);
for( k = 4; fabs( prS - s ) > E; k++ ) { prS = s;
s = 0;
s = integral(a,b,y,k);
}
return 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;
N=0;
dx = (b - a)/n;
a1 = a; b1 = a + dx;
for ( int i = 0; i < n; i++ ) { N++; s = s + dx/2*(f(a1,y)+f(b1,y)); a1+=dx; b1+=dx;
Для решения дифференциальных уравнений наиболее точным и быстрым является Метод Рунге-Кутты, который за малое число шагов дает наиболее точный результат. Однако, для понимания и при написании программы наиболее прост метод Эйлера. Метод Эйлера-Коши промежуточный метод между двумя другими, но в моём случае он показал наихудшую точность.