Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр4.docx
Скачиваний:
1
Добавлен:
14.09.2019
Размер:
193.73 Кб
Скачать

Рис.2.

'рафическое определение краевой задачи при решении дифференциального урав- нения.

Теперь приступим к решению заданного уравнения численными методами:

II. Методы Рунге - Куп а.

Методы Рунге - Кутта обладают следующими отличительными свойствами:

  1. Эти методы одноступенчатые: чтобы найти ут+| , нужна информация только о пре- дыдущей точке х„„ у,„.

  2. Они согласуются с рядом Тейлора вплоть до членов порядка If , где р - различна для различных методов и называется порядком метода.

  3. Они не требуют вычисления производных от f(x,y) , а требуют только вычисления са- мой функции.

Именно благодаря третьему пункту, эти методы удобны для практических вычислений, однако для вычисления одной последующей точки решения нам придется вычислять f(x,y) не- сколько раз при различных значениях х и у.

1. Метод Эйлера.

Один из самых старых и широко известных методов описывается формулой:

у = у + h-f(x ,у )

J m+1 *' т \ т у т/ (3)

Найденное по формуле (3) решение согласуется с разложением в ряд Тейлора вплоть до членов порядка /?, т.е. данный метод является методом Рунге - Кутта первого порядка.

Этот метод имеет довольно большую ошибку приближения, кроме того, он очень часто оказывается неустойчивым - малая ошибка (происходящая от приближения, округления или ис- ходных данных) увеличивается с ростом х.

Для вычисления ym+i метод Эйлера использует наклон касательной только в точке х„„ут.

11иже приведены листинг программы, отражающей суть метода Эйлера и результаты вы- числения для трех различных величин шага h.

{ ЛАБОРАТОРНАЯ РАБОТА № 4. "ЧИСЛЕННЫЕ МЕТОДЫ"

Программа 1 : METHOD EYLERA }

Program lab_4_l;

Uses Crt;

Const N_max = 50 00;

X_beg = 1 { переменная X - начальное условие };

Y_beg = 1 { переменная Y - начальное условие };

X_kon =8.5 { требуемое конечное значение аргумента };

h = 0.1; { (h=0.1,0.05,0.015) - величина шага }

Type Ar = array[0..N_max] of real;

Var X,Y : Ar;

i, n : word;

{ - — }

Function F (X, Y :real) : real;

{ функция вычисления уравнения f(x,у) )

Begin

F:= (2/(X*X*X)) - (3 * Y)/X;

End { F };

( }

Begin ClrScr;

X[0]:= X_beg; Y[0]:= Y_beg;

i : = 0 ;

While X[i] <= X_kon do Begin

  • [i + 1] : =Y [i]+h*F(X[i] ,Y[i] ) ; inc (i) ;

X[i+1] := X[i]+h { формирование следующей переменной X }

End;

Writeln(' 15,'Step = ’,h:1:3); { печать результатов )

Writeln (' ':10,'Y_rez ['Д,'] = 1 ,Y[i] :3:5) ;

Repeat

Until KeyPressed End.

Результаты работы программы:

Step = 0.1 Y_rez [76] = 0.02434

Step = 0.05 Y_rez [150] = 0.02546

Step = 0.015 Y_rez [502] = 0.02578

И так, мы видим, что даже лучший полученный результат все же «не дотягивает» до на- шего эталонного. Следует отметить, что с уменьшением значения шага, результат все больше при- ближается к ранее найденному, и, соответственно, ошибка вычисления уменьшается. В квадрат- ных скобках указывается, сколько промежуточных результатов было произведено, чтобы вычис- лить конечный результат (точнее, на сколько отрезков был разбит график функции от исходного до конечного значения переменной X).

Этот метод можно усовершенствовать множеством различных способов. Ниже приведены два (исправленный и модифицированный) усовершенствованных метода Эйлера.

  1. Исправленный метод Эйлера.

В исправленном методе Эйлера мы находим средний тангенс угла наклона касательной для двух точек хт, ут и хт+ь ут + h*y’m. Соотношения, описывающие данный метод, имеют вид:

Листинг и результаты работы программы:

{ ЛАБОРАТОРНАЯ РАБОТА № 4. "ЧИСЛЕННЫЕ МЕТОДЫ"

Программа № 2 : ISPRAVLEHHY METHOD EYLERA }

Program lab_4_2;

Uses Crt;

Const N_max = 5 00 0;

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;

{ функция вычисления уравнения f(x,y) }

Begin

F:= (2/(X*X*X)) - (3*Y)/X;

End { F };

{ }

Function Fii (X, Y, h :real) : real;

Var F_tool : real;

Begin

F_tOOl:=F(X,Y);

Fii := (1/2)*(F(X,Y) + F(X+h, Y+h*F_tool)); End { Fii };

{ }

Begin ClrScr;

X[0]:= x_beg; Y[0]:= Y_beg; i : =0 ;

While X[i] < X_kon do Begin

  • [i + 1] :=Y[i]+h*Fii(X[i],Y[i] , h) ; inc(i);

X [i] := X[i-l]+h;

End;

Writeln(' 1:15,'Step = ',h:1:3);

Writeln (' 1:10,'Y_rez [',!,*] = 1,Y[i]:3:5);

Repeat

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]