Информатика и интегрированные прикладные системы
.pdf
где n – наивысший порядок производной, определяет порядок уравнения.
Решением ОДУ называется функция y = y(x), которая после ее подстановки в уравнение (7.1) обращает его в тождество.
Общее решение ОДУ имеет вид:
y y(x,C1,C2,...,Cn)
(1.3.7.2)
где C1, C2, …, Cn – постоянные интегрирования.
Частное решение получается из общего при конкретных значениях Ci, i 1, n . Эти значения определяются из n дополнительных условий. В качестве таких условий могут быть заданы значения функции и ее производных при некоторых значениях аргумента x,
иначе говоря, в некоторых точках.
1.3.7.1. Метод Эйлера (метод Рунге-Кутта 1-го порядка).
Разобьем [a, b] на n равных частей – элементарных отрезков, x0, x1,…,xn будем называть узлами сетки, h = (b-a)/n - шаг сетки.
|
x a i h , |
i |
|
; |
|
a , |
x b . |
Очевидно, что |
0,1,..., n |
x |
|||||
|
i |
|
|
|
0 |
|
n |
Заменим в уравнении (7.1) y’ в точке xi её приближенной оценкой – отношением приращений (это следует из определения производной):
|
|
yi |
|
yi 1 yi |
|
|
yi 1 yi |
|||||
yi |
|
|
|
|
|
|
|
|
|
|
|
|
xi |
xi 1 xi |
|
h |
|||||||||
Тогда получаем: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
yi 1 yi |
f (x , y ) |
||||||||
|
|
|
|
|
||||||||
|
|
|
|
|
h |
i |
|
i |
||||
Отсюда формула Эйлера: |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
yi 1 yi h f (xi , yi ) |
||||
|
|
|
|
|
(1.3.7.1.1) |
|
|
|
|
|||
x a i h , |
|
i |
|
|
||||||||
|
0,1,..., n -1 – номер узла |
|||||||||||
i |
|
|
|
|
|
|
|
|
|
|
|
|
211
Зная y0 в точке x0 (начальное условие) можно найти y1, затем, используя уже известные значения x1 и y1, вычислить x2 и y2 и так далее.
Если функция |
|
f |
|
M , |
df |
|
M |
|
, |
df |
|
M |
|
для x a, b , |
y y |
,Y |
, то имеет |
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
1 |
dx |
|
|
2 |
|
dy |
|
|
3 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
место неравенство
y(xi ) yi 2MM4h eM3(xi x0) , 3
где M |
|
M |
|
M M |
, h |
max |
h . |
||||
|
|
4 |
|
2 |
1 3 |
|
0 i N 1 i |
||||
Оценка имеет лишь теоретическое значение. На практике чаще всего пользуются |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
повторяют с шагом hi / 2 и |
двойным пересчетом на ЭВМ: расчет на отрезке xi , xi 1 |
|||||||||||
|
|
|
|
|
|
|
|
hi / 2 ) оценивают по формуле |
|||
погрешность более точного решения yi 1 (при шаге |
|||||||||||
|
|
|
|
|
|
|
|
|
yi 1 |
|
|
|
|
|
|
|
|
|
|
|
|||
|
yi 1 y(xi 1) |
|
yi 1 |
. |
|
||||||
Рассмотрим геометрическую иллюстрацию метода Эйлера. В координатах (x,y)
отобразим известные данные: отрезок [a,b] на оси Х и начальное условие y0 – точка А с координатами (a, y0). Отрезок [a,b] разобьем на n равных частей, получим узлы равномерной сетки a = x0, x1, x2, … , xn = b. Вычислим значения первой производной искомой функции в точке А, используя координату этой точки и исходное уравнение (3)
y (x0 ) f(x0 , y0 ) tg 0
Полученное значение позволяет построить касательную к искомой функции в точке А. Эту касательную можно использовать для вычисления приближенного значения искомой функции в новом узле х1 (кривую y(x) заменяем на отрезком АВ на элементарном отрезке [x0, x1]).
212
|
|
|
|
y |
|
|
|
|
|
|
|
|
|
|
y1 |
= y0 |
+ BC = |
|
y2 |
|
|
|
|
|
|
|
|
|
|
y0 |
+ h*tg 0 = |
|
|
|
|
|
|
B |
|
|
|
|
||
|
y1 |
|
|
|
|
|
D |
|
|
y=y(x) |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|||
y0 |
+ h*f(x0,y0) |
|
|
А |
0 |
|
C |
|
|
|
|
|||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
h |
|
|
|
|
|||
|
|
|
|
y0 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
x |
||
|
|
|
a=x0 |
|
|
x1 |
x2 |
|
||||||
|
0 |
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
b=xn |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рисунок (1.3.7.1.1). Геометрическая иллюстрация метода Эйлера.
Зная (x1,y1), можно аналогично получить новую точку (x2,y2) и т.д.
Из геометрической иллюстрации следует, что:
1. На каждом шаге есть погрешность (на рисунке это отрезок BD).
Погрешность тем больше, чем больше шаг.
2.Ошибка может накапливаться.
Формула Эйлера (3) имеет погрешность метода M O(h2)
Для практического выбора h с целью обеспечения заданной точности решения задачи применяется следующий прием.
Выполняются 2 расчета: с n и 2n узлами. Если полученные значения функции в во всех узлах отличаются не более чем на , задача считается решенной. Если нет, число узлов вновь удваивают и опять сравнивают полученные значения функций.
Таким образом, расчет продолжается до достижения условия
|
max |
| yn y2n |
| |
|||
|
|
|
|
i |
i |
|
|
i 1, n |
|
||||
|
|
|
|
|||
(1.3.7.1.2)
Значение n может достигать большой величины – более 1000. Чтобы не печатать столько значений функции, в алгоритме решения ОДУ методом Эйлера нужно
213
предусмотреть печать не всех рассчитанных значений, а только части их, например, 10-ти
значений, распределенных равномерно по всему отрезку.
Блок-схема
|
|
|
1 |
|
|
|
Входные данные: |
|
|
|
|
|
|
|
|
|
h - шаг |
|
|
|
|
|
Eiler |
|||
|
|
|
|
|
x – координата текущего узла |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y – значение функции в узле |
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
c0=f(x,y) |
|
||||
|
|
|
y=y+c0h |
|
||||
|
|
|
|
x=x+h |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
3 |
|
|
|
|
Выходные данные: |
||
|
|
|
|
Выход |
x – координата узла |
|||
|
|
|
|
y – значение функции в новом узле |
||||
|
|
|
|
|
|
|
|
|
|
Пример Дано уравнение y 2y x 2 |
1 |
|
|
|||||||
Найти решение для отрезка [0; 1], если y(0) = 1. |
|
|
|
||||||||
Выберем n = 10, |
тогда шаг h =(1-0)/10 = 0,1. |
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
1 2y - x |
2 |
Запишем уравнение в каноническом виде y f (x, y) |
|
||||||||||
Начальная точка x0 = 0, y0 = 1. |
|
|
|
||||||||
Вычислим первую точку |
|
|
|
||||||||
y |
y |
0 |
h f(x |
0 |
; y |
0 |
) 1 0,1 f(0; 1) 1 0,1 (1 2 1 02 ) 1 0,1 3 1,3 |
||||
1 |
|
|
|
|
|
|
|
|
|||
x1 = x0 + h = 0 + 0,1 = 0,1 |
|
|
|
||||||||
Вычислим вторую точку |
|
|
|
||||||||
y2 |
y1 |
h f(x1; y1 ) 1,3 0,1 f(0,1;1,3) 1,3 0,1 (1 2,6 |
0,01) 1,3 0,1 3,59 1,659 |
||||||||
x2 x1 h 0,1 0,1 0,2
Аналогично нужно вычислить еще восемь точек (выбрано n=10).
214
1
Начало
2
Ввод a, b, y, n
|
3 |
|
|
|
|
|
|
|
b a |
|
|
|
|
|
|
|
|
|
|
|
|
h |
|
|
|
||
|
n |
|
||||
|
|
|
|
|||
|
|
|
n |
|
||
x = a, k = |
|
|
||||
|
||||||
|
|
|
10 |
|
||
i = 0, |
j = 0 |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
i = j |
нет |
|
|
|
|
|
|
||
|
|
|
|
||
да
5
Вывод i, x, y
6
j = j + k
7
Расчет
новой
точки
8
i = i + 1
нет 9
i > n
да
10
Конец
Исходные данные:
a – начальное значение аргумента; b – конечное значение аргумента; y – начальное значение функции; n – количество отрезков.
h – шаг сетки;
x – координата узла;
k – шаг по номеру печатаемого узла; i – номер узла;
j – номер печатаемого узла.
Eiler(h,x,y)
215
1.3.7.2. Модифицированный метод Эйлера
(метод Рунге-Кутта 2-го порядка).
Метод Эйлера-Коши
Пусть требуется найти решение задачи Коши:
|
|
y |
|
f (x, y) , a x b , y(a) y0 . |
|||||
|
|
|
|||||||
|
|
Как и в методе Эйлера, |
на отрезке a, b зададим конечное множество точек |
||||||
x |
N |
, ( a x |
x |
... x |
|
b ). По методу Эйлера-Коши вычисление приближенного |
|||
i |
i 0 |
|
|
0 |
1 |
|
N |
|
|
решения |
|
yi y(xi ) |
проводится |
следующим образом: вначале вычисляется первое |
|||||
приближение |
|
|
|
|
|
||||
hi f (xi , yi ) ,
затем находится более точное приближение
yi 1 yi hi |
f (xi , yi ) f (xi 1, |
. |
2 |
Остаточный член на каждом шаге в методе Эйлера-Коши имеет порядок O(h3) .
Оценка погрешности может быть получена с помощью двойного пересчета на ЭВМ.
Расчет повторяют с шагом hi / 2 , и погрешность более точного решения yi (при шаге
hi / 2 ) оценивают приближенно:
y y(x ) |
|
|
1 |
|
|
y y |
||
|
|
|||||||
|
|
|
||||||
i |
i |
|
|
3 |
|
i |
i |
|
216
А- начальная точка.
L1- касательная к y(x) в точке А.
L2- касательная к у(х) в середине элементарного отрезка
L3 параллельно L2 через т. А
y
|
|
|
|
|
L1 |
|
|
|
_ |
|
|
|
|
|
L2 |
|
|
|
|
|
|
|
|
|
||
|
|
B |
|
|
L3 |
|
||
|
|
|
|
|
||||
|
|
|
|
|
||||
y1 |
|
|
|
|
|
|||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
y1 |
А |
|
C |
|
|
|
|
|
|
|
у=у(х) |
|
|||||
y0 |
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
h/2 |
|
h/2 |
|
|
x |
|
|
|
|
|
|
|
|
|
|
0 |
x0 |
|
|
|
|
|
|
|
|
|
|
|
x1 |
|
|
|
|
Рисунок 1.3.7.2.1 Геометрическая иллюстрация модифицированного метода Эйлера.
Расчётные формулы:
y1 y0 h2 f (x0, y0) - значение функции в середине отрезка [x0,x1].
y1 y0 h f (x0 h2 , y1) - значение функции в конце отрезка [x0,x1].
Формула модифицированного метода Эйлера:
y |
y |
h f (x |
|
h |
, y |
|
h |
f (x , y )) |
(1.3.7.2.1) |
|
|
||||||||
i 1 |
i |
i |
2 |
i |
2 |
i i |
|
||
где i = 0, 1, …., n-1 - номер узла; xi = a + i h - координата узла;
у0 = у(х0) - начальное условие.
Алгоритм решения ОДУ отличается от описанного ранее алгоритма метода Эйлера
(рис 3) только алгоритмом расчета новой точки.
Погрешность метода О(h3).
Усовершенствованный метод Эйлера-Коши можно еще более уточнить, применяя
итерационную обработку каждого значения yi . Вначале вычисляется
yi(0)1 yi hi f (xi , yi ) ,
217
а затем это приближение уточняется по формулам
|
|
|
|
|
|
|
y(k 1) y h / 2( f (x |
, y(k) |
) f (x , y )) . |
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
i 1 |
|
|
|
i |
i |
|
|
|
i |
1 |
i 1 |
i |
i |
|
|
|
||
|
|
|
Итерации |
|
продолжают до |
тех пор, |
пока в |
пределах |
требуемой точности два |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(k 1) |
|
|
|
(k) |
|
|
|
|
|
(k) |
||
последовательных |
|
приближения |
|
yi 1 |
|
и |
yi 1 |
не совпадут. |
После чего yi 1 |
|||||||||||||||||
принимается за приближенное значение y(xi 1) . |
|
|
|
|
|
|
|
|||||||||||||||||||
|
Пример. Решение ранее рассмотренного уравнения (пример 1.) модифицированным |
|||||||||||||||||||||||||
методом Эйлера. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
y’ - 2 y + x2 |
= 1, |
|
x [0;1], |
y(0) = 1. |
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
Пусть n = 10 , |
h = (1 - 0)/10 = 0,1. |
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
Начальная точка x0 = 0, y0 = 1. |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
Расчёт первой точки. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
y |
y |
|
h f(x |
|
|
h |
; y |
|
|
h |
|
f(x |
|
; y |
|
)) |
1 0,1 f(0 |
0,1 |
; 1 |
0,1 |
f(0; 1)) |
|||||
0 |
0 |
|
0 |
|
0 |
0 |
|
|
||||||||||||||||||
1 |
|
|
|
2 |
|
2 |
|
|
|
|
|
|
|
|
2 |
|
2 |
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
1 0,1 f(0,05; 1 0,05 (1 2 1 - 02 )) 1 0,1 f(0,05; |
1,15) |
||||||||||||||||||||||||
|
|
|
1 0,1 (1 2 1,15 |
0,05 2 ) 1,32975 |
|
|
|
|
|
|||||||||||||||||
x1 |
x0 |
h 0,1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
Аналогично расчёт следующих точек: 2, 3, ... ,10.
|
|
1 |
|
|
|
Входные данные: |
|
|
|
|
|
|
|
|
|
|
|
|
М_Eiler |
h - шаг |
|||
|
|
|
|
|
|
|
x – координата текущего узла |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y – значение функции в узле |
|
2 |
|
|
|
|||
|
=f(x,y) |
|
|||||
|
|
|
c0 |
|
|||
с1=f(x+h/2,y+h/2 c0) |
|
||||||
|
|
|
y=y+c1h |
|
|||
|
|
|
x=x+h |
|
|||
|
|
|
|
|
|
|
Выходные данные: |
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
x – координата узла |
|||
|
|
|
Выход |
||||
|
|
|
y – значение функции в новом узле |
||||
Рисунок 1.3.7.2.2. Алгоритм расчёта новой точки модифицированным методом Эйлера:
218
1.3.7.3. Метод усредненных точек
Пусть требуется найти решение задачи Коши
y f (x, y) , a x b , y(a) y0 .
Как и в методе Эйлера, на отрезке a, b зададим конечное множество точек
xi iN 0 , ( a x0 x1 ... xN b ). По усовершенствованному методу ломаных сначала вычисляются промежуточные значения:
x |
|
x |
h |
, |
y |
|
y |
h |
f |
, |
i |
1 |
i |
2 |
|
i |
1 |
i |
2 |
i |
|
2 |
|
|
2 |
|
|
|
||||
|
|
|
|
|
|
|
|
|
а затем полагают
yi 1 yi hfi 12 ,
|
|
|
|
|
|
|
|
|
где f |
1 |
f x |
1 |
, y |
1 |
. |
||
i |
|
|
|
i |
|
i |
|
|
2 |
|
2 |
2 |
|||||
В этом методе для повышения точности используется усреднённое значение производной на рассматриваемом отрезке:
|
|
|
|
|
|
|
h |
|
yi 1 |
yi |
h |
yi |
yi 1 |
yi |
|
[f(x i , yi ) f(x i 1 , yi 1 )] |
|
|
2 |
|
||||||
|
|
|
|
|
2 |
|
||
В приведённой формуле yi+1 входит в обе части уравнения и не может быть выражено явно. Чтобы обойти эту трудность, в правую часть, вместо yi+1 подставляется значение, рассчитанное по формуле Эйлера(4).
yi 1 yi h f(xi , yi )
Получаем формулу исправленного метода Эйлера:
|
y |
h |
|
|
f (x , y ) f (x , y |
h f (x , y )) |
|
|
|
|
|
||
y |
, |
i 0, n 1 |
|||||||||||
2 |
|
|
|||||||||||
i 1 |
i |
|
i i |
i 1 i |
i i |
|
|
|
|
||||
(1.3.7.3.
1)
где i = 0, 1, …., n-1 - номер узла;
219
xi = a + i h - координата узла;
у0 = у(х0) - начальное условие.
Погрешность исправленного метода Эйлера М = О(h3).
Алгоритм решения ОДУ отличается от описанного ранее алгоритма метода Эйлера
(рис 3) только алгоритмом расчета новой точки.
1 С_Eiler
2
c0 = f(x, y) x = x + h
с1 = f(x, y + h c0) y = y + h (c0 + c1)/2
3
Выход
Входные данные: h - шаг
x – координата текущего узла y – значение функции в узле
Выходные данные: x – координата узла
y – значение функции в новом узле
Рисунок 1.3.7.3.1. Алгоритм расчёта новой точки исправленным методом Эйлера:
y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
L1 |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|||
_ |
|
|
|
|
|
|
|
|
L3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
B |
|
|||||||||
|
|
|
|
|
|
|
|
L2 |
|
|||
y1 |
|
|
|
|
|
|
|
|
|
|||
|
|
|
L4 |
|
|
|||||||
y1 |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|||||||||
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y = y(x) |
|
|||||
|
|
|
|
|
|
|
|
|||||
y0 |
А |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
h |
|
|
|
|
|
|
|
|
|
|
0 |
x0 |
|
x1 |
|
|
|
x |
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
L1- касательная к у(х) в начальной точке А, с tg 0 = f(x0, y0).
220
