- •Лабораторная работа №4
- •Донецк - 2003
- •I. Численные методы решения дифференциальных уравнений.
- •II. Методы Рунге - Куп а.
- •3. Модифицированный метод Эйлера.
- •III. Методы прогноза и коррекции.
- •Var X,XI,y,y1 : Ar; I : word;
- •6. Выводы, содержащие анализ точности и скорости сходимости рассмотренных методов.
Until
KeyPressed
End.
Результаты
работы программы:
Step =
0.1
Y_rez
[75] = 0.02551
Step =
0.01
Y_rez [750] =
0.02601
Step =
0.005
Y_rez
[1500] =
0.02602
Мы
видим, что результаты
сильно «приблизились»
к эталонному (0,2605).
Исправленный
метод Эйлера согласуется с разложением
в ряд Тейлора вплоть до членов
степени
h2,
являясь, т.о. методом Рунге - Кутта
второго порядка.
В
данном методе мы находим тангенс угла
наклона касательной в точке:
Модифицированный
метод Эйлера также согласуется с
разложением в ряд Тейлора
вплоть до
членов степени h\
и также является методом Рунге - Кутта
второго порядка.
Листинг
и результаты работы программы для трех
различных величин шагов:
{ ЛАБОРАТОРНАЯ РАБОТА
№
4. "ЧИСЛЕННЫЕ МЕТОДЫ"
Программа
№ 3
: MODIFITSIROVANY
METHOD
EYLERA }
Program
lab_4_3;
Uses
Crt;
Const
N_max
=
5 000;
X_beg
=
1 { переменная
X
- начальное условие };
Y_beg
=
1 { переменная
Y
- начальное условие };
X_kon
=8.5 { требуемое
конечное значение аргумента };
h
=
0.1; { (h=0.1,0.01,0.005)
- величина
шага
}
Type
Ar
=
array[0..N_max]
of real;
Var
X,Y
:
Ar;
i,
n :
word;
Function
F (X,
Y :real)
:
real;
Begin
F
:
=
(2/(X*X*X)) -
(3
*Y)/X;
End
{
F };
{
}
Function
Fii (X,
Y, h :real)
:
real;
Соотношения,
описывающие модифицированный метод
Эйлера имеют вид:
3. Модифицированный метод Эйлера.
Var
F_tool :
real;
Begin
F_tOOl:=F(X,Y);
Fii
:=
F
(X+h/2,
Y+<h/2)*F_tOOl);
End
{
Fii };
While X[i] <
X_kon do
Begin
У
[i + 1] :=Y[i]+h*Fii(X[i]
,Y[i] ,h) ;
inc(i);
X[i] :=
X[i-1]+h;
End;
Writeln(' 15,'Step
= ',h:l:3);
Writeln (' '
:10, 'Y_re
z ['Д,']
= ',Y[i]
: 3 :7)
;
Repeat
Until
KeyPressed
Результаты,
последних двух методов почти не
изменились при одинаковом значении
шага
/г. Но (было проверено
экспериментально!)
при уточнении чисел до миллиардных
долей, результа-
ты модифицированного
метода Эйлера имеют большее приближение
к эталонному.
Метод
Рунге - Кутта четвертого порядка.
Данный
метод является одним из самых употребляемых
методов интегрирования диффе-
ренциальных
уравнений. Этот метод применяется
настолько широко, что в литературе его
просто
называют «методом Рунге -
Кутта» без всяких указаний на тип или
порядок. Этот классический
метод
описывается системой следующих пяти
соотношений:
Begin
ClrScr;
X [0]
:= x_beg; Y[0]
:= Y_beg;
i :
= 0 ;
End.
Результаты
работы программы:
Step
=
0.1
rez
[75] =
0.0255086
Step
=
0.01
rez
[750] =
0.0260537
Step
=
0.005
rez
[1500] =
0.0260238
Ошибка
приближения для этого метода равна ej
=
kh5.
Заметим, что при использовании
этого
метода функцию необходимо вычислять
четыре раза.
Ниже
приведен текст программы, результаты
расчета и оценка точности результатов,
по-
лученных но методу Рунгс
- Кутта четвертого порядка для трех
различных величин шагов.
{ ЛАБОРАТОРНАЯ РАБОТА
№ 4.
"ЧИСЛЕННЫЕ
МЕТОДЫ"
Программа
№ 4 : METHOD RUNGE - KUTTA
IV }
Program lab_4_4;
Uses Crt;
Const N_max
= 5000;
X_beg
=
1 { переменная
X
- начальное условие };
Y_beg
=
1 { переменная
Y
- начальное условие };
X_kon
=8.5 { требуемое
конечное значение аргумента };
h
=
0.1; { (h=0.1,0.01,0.005)
- величина
шага }
Type Ar
= array[0..N_max]
of real;
Var X,Y
: Ar;
i,
n :
word;
Function F (X, Y :real) :
real;
Begin
F :
= (2/
(X*X*X))
- (3*Y)/X;
End {
F };
{
}
Function Fii (X, Y, h
:real)
: real;
Var kl,
k2, k3,
k4 : real;
Begin
kl:=
F(X,Y);
k2
:
=
F(X+h/2,
Y+(h/2)*kl);
k3:=
F(X+h/2,
Y+(h/2)*k2);
k4 :
=
F(x+h,
Y+h*k3)
;
Fii :=
(h/6)*(kl+2*k2+2*k3+k4)
End {
Fii } ;
{ J
Begin
ClrScr;
X [0] :=
X_beg; Y[0] :=
Y_beg;
i
:
=
0 ;
While X[i]
< x_kon do
Begin
Y[i+1]
:=Y[i] +
Fii(X[i],Y
[i], h) ;
inc
(i)
;
X[i] := X[i-1]+h
End;
Writeln(1 15,'Step
= ',h:1:3);
Writeln (' 1:10,'Y_rez
[',i,']
= ',Y[i]:3:7);
Repeat
Until KeyPressed
End.
Результаты
работы
программы:
Step
= 0.1
Y_rez
[75] = 0.0254695
Step =
0.01
Y_rez [750] =
0.0260533
Step =
0.005
Y_rez
[1500] =
0.0260237