Вы находитесь на странице: 1из 21

Федеральное агентство по образованию Российской Федерации

Государственное образовательное учреждение


высшего профессионального образования
Нижегородский государственный университет им. Н.И. Лобачевского

Факультет вычислительной математики и кибернетики


Кафедра теории управления и динамики машин

Лабораторная работа № 2

Решение дифференциальных уравнений


численными методами
как процесс математического
моделирования

Выполнила: Студентка группы 82-02


Смирнова Т.Е.
Проверила: Кадина Е.Ю.

Нижний Новгород
2010 г.

1
Введение.................................................................................................................................................
Общее описание численных методов решения задачи Коши:
Метод Эйлера………………………………………………………………………………………
Метод Штёрмера…………………………………………………………………………………….
Метод Эйлера с регулировкой шага………………………………………………………………
Метод Рунге-Кутта…………………………………………………………………………………..
Основные источники ошибок методов численного интегрирования…………………………
Анализ решения различных дифференциальных уравнений:
1. dy/dx =  (1  y2)1/2…………………………………………………………………………………
2. dy/dx = (y+(y2-4x2)1/2) / x……………………………………………………………………………
3. dy/dx = (4-y2)1/2 / y…………………………………………………………………………………
4. dy/dx = 1/2(y2-1)……………………………………………………………………………………
5. dy/dx = xy(1+2y)/(1-y2)……………………………………………………………………………..
6. dy/dx = -x+(x2+2y)1/2……………………………………………………………………………….
7. dy/dx = x/(1-y2)……………………………………………………………………………………..
8. dy/dx = 1-y4……………………………………………………………………………………….
9. x’ = 1-y2; y’ = xy(1+2y)……………………………………………………………………………..
10. x’ = y-0.1x ; y’ = -x-0.1y……………………………………………………………………………
11. x’ = y-x(x2+y2) ; y’ = -x-y(x2+y2)…………………………………………………………………
12. x’ = -x+2y; y’ = -2x+y…………………………………………………………………………….
Заключение………………………………………………………………………………………………

2
Введение

Дифференциальные уравнения являются тем языком, которым очень часто пользуются при
математическом моделировании явлений и процессов самой разнообразной природы.
Для большинства дифференциальных уравнений не известны способы построения точного
аналитического решения, и здесь на помощь приходят численные методы.
Наша задача научиться распознавать и объяснять различные ошибки, которые могут
возникнуть при численном методе решения. Так же стоит задача по внешнему виду
дифференциального уравнения определять, какие ошибки численных методов могут нам
встретиться и как их избежать.

Примечание:
Цвета графиков обозначают следующие методы:
Синий – метод Эйлера.
Зелёный – метод Штермера.
Фиолетовый – метод с регулировкой шага.
Белый – метод Рунге-Кутта
Красный – точное решение.

3
Общее описание численных методов решения задачи Коши
Метод Эйлера

Идея метода Эйлера состоит в том, что отрезок построения решения разбивается на равные
отрезки, после чего на концах полученных отрезков приближённо находятся значения функции,
являющейся решением уравнения. Тогда последовательно соединив полученные точки
отрезками, мы получим приближённый вид решения. При увеличении количества, на которые
разбивается исходный отрезок, мы получим более точное приближение к решению.

Рассмотрим метод Эйлера для уравнения первого порядка, разрешённого относительно


производной: y / ( x)  f ( x, y ) . Разложим функцию y(x) в окрестности точки x n :
y ( x n +h)=y( x n )+ y  ( x n )h+o(h)
Если имеется оценка y n значения y( x n ), имеющая погрешность  n =o(h), то есть y( x n )= y n
+o(h), то
y  ( x n )=f( x n ,y( x n ))=f( x n , y n +o(h))= f( x n , y n +o(h))+f( x n , y n )-f( x n , y n )=
=o(h) f y ( x n ,  )+f( x n , y n )=f( x n , y n )+o(h).
Подставляя эти значения в формулу Тейлора, имеем:
y( x n +h)= y n +o(h)+h(f( x n , y n )+o(h)= y n +hf( x n , y n )+o(h), откуда мы имеем оценку для
y( x n +h): y n 1  y n  h f( x n , y n ), имеющую погрешность  n 1 =o(h).
Таким образом, метод Эйлера – одношаговый метод первого порядка. Его разностная формула
точна на шаге до членов первого порядка по h:
y n 1  y n  k1 h
k1 = f( x n , y n ),

Метод Эйлера допускает простую геометрическую интерпретацию: он представляет собой


метод касательных. Если известно приближённое решение на одном конце отрезка (изначально
это начальные условия), то можно вычислить наклон поля в этой точке, так как y  (x)=f(x,y), а
x,y нам известны. Тогда заменим решение на этом отрезке на прямую, являющейся касательной.
В этом случае мы сможем найти приближённое значение решения в следующем конце и так
далее.

4
Метод Штёрмера

Чтобы получить метод второго порядка, точный до членов с h 2 , необходимо использовать


оценку второй производной.
Разложим y  в окрестности точки x n :
y  ( x n +h)= y  ( x n )+h y  ( x n )+o(h).
Тогда
y ( x n  h)  y ( x n )  o(h) f ( x n  h, y n  hf ( x n , y n ))  f ( x n , y n ) o( h)
y  ( x n )= = +
h h h
Разложение функции y(x) по формуле Тейлора в окрестности точки x n имеет вид:
2
y ( x n +h)=y( x n )+h y  ( x n )+ h y  ( x n )+o( h 2 )
2
Подставляя значения производных, получаем что
y ( x n +h)=( y n +o( h 2 ))+h(f( x n , y n )+o( h 2 ))+ h ( f ( x n  h, y n  hf ( x n , y n ))  f ( x n , y n ) + o( h) )
2

2 h h
h
+o( h 2 )= y n +h f( x n , y n )+ ( f ( x n  h, y n  hf ( x n , y n ))  f ( x n , y n ) )=
2
h
= yn + ( f ( xn  h, y n  hf ( x n , y n ))  f ( x n , y n ) ) +o( h 2 )
2
То есть
k1  k 2
y n 1  y n  h , где
2
k1 = f( x n , y n ), k 2 = f ( xn  h, yn  hf ( xn , yn )) , y ( x n +h)= y n 1 +o( h 2 )

5
Метод Эйлера с регулировкой шага

Идея метода заключается в том, что


y ( x n +h)= y n 1  o(h) – Эйлер
k  k2 k  k1
y ( x n +h)= y n 1  o( h 2 )= y n +h 1 +o( h 2 )= y n +h k1 +h 2 +o( h 2 ) - Штёрмер
2 2
т.е.
k  k1
y n 1 (Штёрмер)= y n 1 (Эйлер)+ h 2 , а значит
2
k  k1 k  k1
 n (Эйлер)=o(h)= h 2 +o( h 2 ) и её главный член  = h 2
2 2
Тогда метод Эйлера с регулировкой шага будет иметь следующий вид.
Пусть  - заданная точность. Вычисляется yˆ n 1 = y n +h k1 , xˆ n 1 = x n +h,
k  k1
k1 = f( x n , y n ), k 2 =f( x n 1 , y n 1 ). Определяется  = h 2 .
h

Если <=  <=5  , то x n 1 = xˆ n 1 , y n 1 = yˆ n 1 ;
5

Если  < , то x n 1 = xˆ n 1 , y n 1 = yˆ n 1 , h=2h;
5
Если  >5  , то h=
h
и происходит повторное вычисление.
2

6
Метод Рунге-Кутта

Данный метод получается при рассмотрении 5 членов разложения в ряд Тейлора функции y(x)
в точке x n :
3 4
y ( x n +h)=y( x n )+ y  ( x n )h +
h
y ( x n ) + h y ( x n ) + h y  4  ( x n ) +o( h 4 )
2 6 24
k1  2k 2  2k 3  k 4
y n 1 = y n +h , где
6
k1 = f( x n , y n ),
h h
k 2 ==f( x n + , yn + k1 ),
2 2
k 3 = f( x n + h , y n + h k 2 ),
2 2
k 4 = f( x n +h, y n +h k 3 ).
При этом получаем, что y ( x n +h)= y n 1 + o( h 4 ), т.е. разностная формула точна до членов
четвёртого порядка по h.

7
Основные источники ошибок методов численного интегрирования:

При замене дифференциального уравнения на соответствующее разностное уравнение на


каждом шаге совершается ошибка, зависящая от выбранного метода. Суммарную ошибку,
совершенную при интегрировании, обозначим δn.

Основные источники ошибок:


1. Ошибка, совершаемая на каждом шаге (погрешность аппроксимации)
2. Накопление ошибки ( преобразование ошибки, совершенной на предыдущих шагах).
3. Ошибки конечно-разрядной арифметики.
4. Может “перескочить” с одного решения на другое.
5. При каком-либо шаге можем попасть туда, где решение не определено (изоклины
вертикального наклона)

Если шаг H слишком большой, погрешность аппроксимации будет во многом определять


величину ошибки. Ошибка становится велика, когда функция f неограниченна, ( f/y не
является непрерывной), т. е. нарушается достаточное условие существования решения вида
y=y(x), а неограниченность ∂f/∂y - нарушает достаточные условия его единственности, условия
теоремы Коши-Пикара.

8
Анализ решения различных дифференциальных уравнений:

1. dy/dx =  (1  y2)1/2

В данном примере при


относительно больших
шагах (H) происходит:
нарушение
достаточного условия
единственности. Т.к. при
Y стремящемся к ±1
происходит быстрая
переориентация поля
направлений, и
касательная не успевает
за производной функции
f(x,y). Её можно
избежать, уменьшив шаг
(H).

Как это происходит?

На очередном шаге, очень близком к Yn → ±1 ломаная


Эйлера не успевает отслеживать изгиб интегральной
кривой, и вылетает за границу решения. На рисунке
показано как это происходит.
Sn – имеющаяся ошибка, S(n+1) –
ошибка на очередном шаге.
Постепенно уменьшая шаг интегрирования,заметим,
что метод Эйлера первый стал показывать
безошибочное решение, затем метод Штермера, и только потом метод Рунге – Кутта. Метод с
регулировкой шага в уравнении всегда дает ошибку, так как функция достаточно гладкая, этот
метод с каждым новым расчетом увеличивает шаг и не может вовремя, в частности вблизи Y =
±1, “затормозить”, из-за чего и вылетает за пределы существования функции.
В связи с достаточной гладкостью функции при минимальном шаге можно получить очень
точные решения на всех методах, за исключением метода с регулировкой шага.

9
2. dy/dx = (y+(y2-4x2)1/2)/x

Рассмотрим
нижнюю область,
близкую к Y=0.
Решая методом
Эйлера и другими
методами возникает
ошибка : нарушение
достаточных условий
единственности, т. е.
быстрая пере-
ориентация поля
направления. Причём
всё это происходит при
достаточно больших
шагах.
Уменьшив, шаг мы добьемся желаемого результата. Первым покажет правильный
результат метод Рунге-Кутта, потом метод Штернера и Эйлера, за исключением метода с
регулировкой шага.
Чем более Y → 0, тем меньшим должен быть шаг.
Теперь рассмотрим верхнюю область.
При H > 0 все методы без исключения дают правильный результат, так как
направление поля очень ровное. Самое интересное начинается если H < 0. Здесь возможны
варианты.
При малых шагах программа выдаёт результат: бесконечное значение правой части:
нарушение достаточного условия существования. Функция стремится к бесконечности,
ошибка шага неограниченно возрастает.
При больших шагах возникает: нарушение достаточных условий единственности.
А если соответствующим
образом подобрать шаг и
начальную координату (см.
рис.), то получим интересное
явление. Функция проходит до
Y=0, далее точно попадает в 0,
тем самым она попадает в
особую точку, и далее
переходит на частное решение,
по которому и уходит из поля
нашего зрения. Функция
получается словно
«склеенной». Даже при
маленьком изменении шага и
начальной координаты и появляются вышеперечисленные ошибки.
Было замечено, что при x=0, y>0. программа вылетает.

10
3. dy/dx = (4-y2)1/2 / y

Сразу заметим,
что прямые Y=±2
тоже удовлетво-
ряют нашему
уравнению, а Y = 0
не является ре-
шением.
Решения
полученные
нашими методами
совпадают с
точным решением
только когда Н > 0
( кроме метода рег.
шага).
Метод Эйлера выдаёт очень неточное решение. Метод Штермера и Рунге-Кутта близки к
точному. С уменьшением шага ошибка нарушения достаточного условия единственности
пропадает, и все методы начинают показывать достаточно точные решения.
Если H < 0, то
происходит
ошибка при
переходе фазовых
траекторий,
связанная с
нарушением
достаточных
условий
существования.
Это наблюдается
во всех методах, и
точного решения
не получено ни при
каких начальных
условиях.

Так же заметим, что чем ближе Y0 к Y=0, тем больший шаг доступен для правильного
решения, и что чем выше порядок членов Н, тем большую разность шага можно допустить,
это объясняется более точными вычислениями методов.

11
4. dy/dx = 1/2(y2-1)

Начальные условия
X = -1,62566841
Y = 0,94285715
Шаг = 0,05
Все методы строят
достаточно точные решения.
Единственное, метод Эйлера
выдаёт заметные, но небольшие
погрешности по сравнению с
методами высших порядков. И
практически как всегда,
отличился метод с регулировкой шага. Этот метод строил график вдоль направляющих,
достаточно далеко от точного решения. При уменьшении шага метод Эйлера так же начинает
показывать достаточно точные решения.
Видимо, при ещё более малых шагах, которые нам программно недоступны могут
возникать ошибки конечно-разрядной арифметики.
Других ошибок замечено не было.

12
5. dy/dx = xy(1+2y)/(1-y2)

В этом примере можно выделить 5 основных областей, в


которых при соблюдении некоторых условий, различные
методы дают, по-видимому, точный результат. И еще одну
область, где ни один метод не даёт более-менее
вразумительного ответа.
1) Y<-1, X>0, H>0
2) Y<-1, X<0, H<0
3) -1<Y<0 , любой X
если h>0 график вправо
если h<0 график влево

4) Y>1, X ≥ 0.60962558, h<0


5) Y>1, X ≤ 0.60962558, h<0

И, так
сказать,
промежуточная
область, где и
происходят все
ошибки.
Выше прямой y=1, можно утверждать, что все численные
методы допускают грубую ошибку при «y» близком к 1.
т.к. тут нарушается достаточное условие существования
решения.
На рисунке показано какие ошибки происходят при
различных методах из различных начальных условий.
Ошибки перехода с одной фазовой траектории на
другую, связанные с нарушением достаточного условия
существования решения
Результат таков: В связи с достаточной сложностью кривой ни один из используемых методов
не показал достаточно правильные решения в обозначенной области.

13
6. dy/dx =- x+(x2+2y)1/2

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

14
7. dy/dx =x/(1-y2)

Сразу заметим, что


довольно точное решение
выдаёт только метод
Штермера. В методе
Рунге-Кутта появляется
лишний “хвост” –
перескочили на другое
решение, то же самое и в методе Эйлера – перескочили на соседние решения, а в методе с
регулировкой шага – теряемся при вертикальном наклоне касательной.

При уменьшении шага


ни один из методов не
показывает даже
близкого к точному
решению.

При увеличении шага,


довольно близкое к
точному, решение
показывает метод Эйлера, в
остальных методах
наблюдаем грубые ошибки.
Но все численные методы
допускают грубую ошибку
при «y» близком к 1. т.к. тут
нарушается достаточное
условие существования
решения. В связи с
достаточной сложностью
кривой ни один из используемых методов не показал достаточно правильные решения в этой
области.

15
8. dy/dx = 1-y4
При очень малом шаге
происходит ошибка ко-
нечно-разрядной
арифметики. Ошибка
происходит при ис-
пользовании любых
методов, кроме
регулировки шага. При
больших шагах ошибок
не происходит.
Увеличив шаг до
0.00202, получаем
достаточное совпа-
дение. При
уменьшении же шага
ситуация ухудшается. Так же, чем ближе мы к Y = 1, тем большая ошибка обнаруживается, и
чем далее от Y = 1, тем менее ее заметно (в окне графика функции). Это относиться к
предельно маленьким шагам, недоступным к выставлению пользователем. При шаге 0.00202
такого эффекта уже не наблюдается.
При Y = 1, все методы правильные, причем при любом шаге.
Рассмотрим влияние ошибок конечно-разрядной арифметики при выполнении операции
сложения: предположим, что дифференциальное уравнение dy/dx = f (x,y) имеет частное
решение Y=a0. Тогда это изоклина горизонтального наклона. Если она в то же время
является асимптотой для решения некоторой задачи Коши с начальным условием Y(x0) =
Y0a, то в процессе численного интегрирования f(x n,yn)0 при n. Тогда hf(xn,yn)0,
т.е., начиная с некоторого
шага, это произведение
станет очень мало, и при
сложении с yn произойдет
выравнивание порядков
слагаемых; при этом
значащий разряд этого
произведения выйдет за
пределы разрядной сетки и будет утерян. С этого момента к Yn будет прибавляться на каждом
шаге нуль, и интегральная кривая выйдет на прямую, параллельную асимптоте, вместо того,
чтобы неограниченно приближаться к ней. Заметим также, что с уменьшением h эта ошибка
станет только больше.

16
9. x’=1-y2
y’=xy(1+2y)

Все методы
показывают
довольно точные
решения как при
большом, так и
при довольно
маленьком шаге,
но при “у”
близком к -1/2 в
методах
Штермера и
методе
регулировки
шага появляется
вычислительная
неустойчивость
при большом
шаге, а при
маленьком шаге
– в методах
Эйлера и
регулировки
шага, т.к. тут
нарушается
достаточное
условие
существования
решения.

В связи с достаточной сложностью кривой ни один из используемых методов не показал


достаточно правильные решения в этой области.
Только метод Рунге-Кутта показал довольно точное решение во всех областях.

17
10. x’=y-0.1x
y’=-x-0.1y
Как видно на рисунке
метод Эйлера выдаёт не точное
решение, так как в вычисление
ошибки участвует только
ошибка предыдущего шага.
Методы Штермера и Рунге-
Кутта показывают точные
решения, так как каждая
следующая оценка ошибки
получается через несколько
предыдущих в котором Метод
же с регулировкой шага даёт
совсем не правильное решение,
здесь присутствует ошибка
вычислительной неустойчивости.
При шаге h>0,198 вычислительная неустойчивость появляется и для метода Эйлера, что
не скажешь про методы Штернера и Рунге-Кутта, которые продолжают считать правильно.
С уменьшением шага
точность метода Эйлера начинает
приближаться к другим методам
высших порядков и в конце концов
показывает точное решение.
Откуда же взялось h=0.198, можно
сказать, что случайно, методом
научного тыка, но на самом деле h
можно посчитать.
Рассмотрим процесс однажды
возникшей ошибки. Пусть на шаге
n ошибка равняется Jn. Тогда новое
значение уn+1 будет подсчитано с
ошибкой Jn+1.
yn+1 + Jn+1 =yn + jn + hf(xn, yn+jn) +o(h)
Считая jn , h малыми и отбрасывая нелинейные по члены в разложении Тейлора, в
линейном приближении получим.
Вычислительная неустойчивость будет наблюдаться при таких h, при которых | 1+h
f(xn,yn)/y | принимает значения больше единицы. Для систем уравнений аналогичное
условие заключается в том, что определитель матрицы
(Е +h Df(xn,yn)/Dy) (где Е – единичная матрица, а - матрица Якоби по переменным у)
должен стать больше единицы.
Для данной системы Р находится так: Её определитель:
Условие | | >1 будет выполнено при h> 0.2/1.01  0.2

18
11. x’=y-x(x2+y2)
y’=-x-y(x2+y2)

Можно заметить, что


поле направлений очень
похоже на предыдущий
пример, но само
уравнение существенно
нелинейное. Такие
уравнения
характеризуются тем, что
сколь угодно малая
добавка в их правые
части может породить
предельный цикл, а при
численном
моделировании такие
добавки могут играть ошибки.
В этом примере при начальных условиях выставленных по умолчанию и использовании
метода Эйлера наблюдается эффект предельного цикла, квадрат радиуса которого равен Н/2.
При увеличении шага интегрирования этот эффект стал заметен и на других методах более
высокого порядка.

19
12. x’=-x+2y
y’=-2x+y

При большом шаге


метод Рунге-Кутта
выдаёт самое верное
решение, остальные
методы
перескакивают на
другие решения.

При маленьком шаге так же правильное решение показывает метод Штермера.

20
Заключение.
В результате проведенных исследований можно подвести итоги проделанной работы:
- Познакомились с некоторыми численными методами, которые позволяют построить
график функции.
- Научились распознавать различные ошибки возникающие при решении
дифференциальных уравнений численными методами по графику функции.
- Научились ликвидировать эти ошибки различными методами.
- По внешнему виду уравнения можем, с некоторой степенью уверенности, сказать,
какие ошибки следует ожидать при решении данного дифференциального уравнения
численными методами.
- Узнали, что метод Рунге-Кутта наиболее точный, но медленный, а метод Эйлера
наиболее быстрый, но менее точный. Хотя при современных технологиях разницы в
выполнении расчетов не заметно.

21