- •Основы математического моделирования
- •Содержательные математические модели
- •Классификация содержательных моделей
- •Формальные математические модели
- •Законы сохранения
- •Вариационные принципы
- •Элементы теории размерностей
- •Контрольные вопросы
- •Основы работы с системой Maxima
- •Установка и запуск системы Maxima
- •Графический интерфейс wxMaxima
- •Справочная информация в wxMaxima
- •Сохранение данных и управление wxMaxima
- •Система компьютерной математики Maxima
- •Основные возможности системы Maxima
- •Скалярные выражения
- •Векторные и матричные выражения
- •Функции и управляющие структуры
- •Контрольные вопросы
- •Элементы вычислительной математики
- •Основы теории погрешностей
- •Абсолютная и относительная погрешности
- •Погрешности основных операций
- •Численное решение нелинейных уравнений
- •Локализация корней уравнения
- •Метод бисекции
- •Метод простой итерации
- •Метод касательных
- •Методы численного интегрирования
- •Метод прямоугольников
- •Метод трапеций
- •Метод парабол
- •Численное решение задачи Коши
- •Метод Эйлера
- •Метод Эйлера–Коши
- •Методы Рунге–Кутты
- •Контрольные вопросы
- •Моделирование в приложениях
- •Падение тела с учётом сопротивления воздуха
- •Колебания маятника с учётом силы трения
- •Полёт тела с учётом сопротивления воздуха
- •Листинги программ
44 3. Элементы вычислительной математики
стью = 10−6.
Сравнивая полученные результаты отметим, что из приведённых примеров формула парабол даёт наилучший по точности результат. Для достижения заданной погрешности аппроксимации при использовании формулы парабол (3.11) в приведённом примере шаг узлов
сокращается до значения 3 = ( 1 )3 = 1 , которое достигается всего за
2 8
три итерации. Однако, с точки зрения трудоёмкости, аппроксимация
параболами требует вычисления почти вдвое большего числа значений подынтегральной функции.
3.4. Численное решение задачи Коши
Дифференциальное уравнение называется обыкновенным, если оно связывает независимую переменную , искомую функцию и её производные ′, ′′, . . . , ( ) до -го порядка включительно:
( , , ′, ′′, . . . , ( )) = 0, |
(3.12) |
где порядок старшей производной ( ) соответствует порядку дифференциального уравнения.
Общим решением обыкновенного дифференциального уравнения называется явная функция
= ( , 1, 2, . . . , ), |
(3.13) |
связывающая независимую переменную и постоянных интегрирования 1, 2, . . . , и обращающая уравнение (3.12) в тождество. Определение постоянных интегрирования 1, 2, . . . , с помощью
системы начальных условий:
0 = ( 0, 1, 2, . . . , ),
|
′ = |
′( |
|
|
|
|
|
|
|
|
|
|
0 |
, |
1 |
, |
2 |
, . . . , |
|
), |
|
||
0 |
|
|
|
|
|
(3.14) |
|||||
|
. . . = |
. . . , |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
0( −1) = ( −1)( 0, 1, 2, . . . , ), |
|
||||||||||
приводит к получению частного решения обыкновенного дифференциального уравнения:
= 0( ), |
(3.15) |
Совокупность обыкновенного дифференциального уравнения (3.12) и начальных условий (3.14) образует задачу Коши.
3.4. Численное решение задачи Коши |
45 |
3.4.1. Метод Эйлера
Запишем задачу Коши для обыкновенного дифференциального уравнения первого порядка в виде:
′ = ( , ), |
[ , ], |
( ) = . |
(3.16) |
Для численного решения задачи (3.16) в области определения[ , ] искомой функции 3.15 введём сетку = 0 < 1 < . . . < < = . Для простоты будем считать сетку равномерной, а шаг
сетки = − −1 –– постоянной величиной = − .
В основе рассматриваемых численных методов лежит замена исходного дифференциального уравнения его дискретным конечно-раз- ностным аналогом. Для построения конечно-разностного уравнения разложим искомую функцию в окрестности узла сетки в ряд Тейлора по степеням :
|
|
= |
|
+ ′ |
+ |
2 |
′′ |
+ . . . |
(3.17) |
|
|
−1 |
2! |
||||||||
|
|
−1 |
|
−1 |
|
|
Сохранив в (3.17) первые два слагаемых и подставив вместо производной известную из (3.16) функцию ′ = ( , ) получим основную формулу метода Эйлера (формулу ломаных)
= −1 + · ( −1, −1) или − −1 = ( −1, −1). (3.18)
Последнее выражение формально соответствует заданному дифференциальному уравнению, производная из левой части которого заменена своим конечно-разностным аналогом. Поскольку для вычисления значения сеточной функции в текущей точке в формуле (3.18) используется лишь одно её значение в предшествующей точ-
ке 1, то конечно-разностный метод Эйлера относится к семейству
явных одношаговых методов
− .
Пример 3.8. Решить задачу Коши для обыкновенного дифферен-
циального уравнения ′ |
= − с начальным условием (0) = 1 , |
|||||
используя метод Эйлера на отрезке [0, 8 |
2 |
|||||
] для равномерных се- |
||||||
|
|
|
5 |
|
||
ток с шагами 1 = 2 , 2 |
= 1 |
и 3 = |
1 |
, и сопоставить полученные |
||
|
||||||
5 |
5 |
|
10 |
|
|
|
аппроксимации с точным решением. |
|
|
|
|
||
Для решения поставленной задачи в листинге 3.8 : (%i1)–(%o5) задаются границы интервала «a:0», «b:1.6» и начальное значение
46 |
3. Элементы вычислительной математики |
функции «ya:0.5». Затем определяются вектор значения шага сетки «h:[0.4,0.2,0.1]» и функция, соответствующая значениям первой производной в заданных точках «f(x,y)». Далее в 3.8 : (%i6)– (%o7) задаются формулы для нахождения абсцисс «x[i,j]» и ординат «y[i,j]» сеточной функции в зависимости от номера узла «i» и шага сетки «j». После применения начальных условий в 3.8 : (%i8)–(%o11) генерируются списки координат сеточных функций, соответствующих каждому из значений шага сетки «dots1», «dots2» и «dots3». Для сопоставления качества построенных аппроксимаций в 3.8 : (%i14)–(%o15) находится точное решение исходной задачи Коши в символьном виде.
Листинг 3.8 Решение задачи Коши методом Эйлера
(%i1) |
a:0$ b:1.6$ ya:0.5$ |
|
h:[0.4,0.2,0.1]$ |
|
f(x,y):=y-x; |
(%o5) |
( , ) := − |
(%i6) |
x[i,j]:=a+h[j]*i; |
|
y[i,j]:=y[i-1,j]+h[j]*f(x[i-1,j],y[i-1,j]); |
(%o6) |
, := + |
(%o7) |
, := −1, + ( −1, , −1, ) |
(%i8) |
y[0,1]:ya$ y[0,2]:ya$ y[0,3]:ya$ |
|
dots1:makelist([x[i,1],y[i,1]],i,0,(b-a)/h[1]); |
|
dots2:makelist([x[i,2],y[i,2]],i,0,(b-a)/h[2])$ |
|
dots3:makelist([x[i,3],y[i,3]],i,0,(b-a)/h[3])$ |
(%o11) |
[[0, 0.5],[0.4, 0.7],[0.8, 0.82],[1.2, 0.828],[1.6, 0.6792]] |
(%i14) |
ode2(’diff(y,x)=f(x,y),y,x); |
|
ic1(%,x=a,y=ya); |
(%o14) = (% − (− − 1)% − )%
rat: replaced -0.5 by -1/2 = -0.5
(%o15) = −% −22 − 2
На рис.3.6 показана аппроксимация решения задачи Коши лома-
ными Эйлера на отрезке [0, 8 |
] на регулярных сетках при 1 = 2 , |
||||
|
5 |
|
5 |
||
2 = 1 |
и 3 = |
1 |
. Чёрная утолщённая линия соответствует графи- |
||
|
|||||
5 |
10 |
|
|
+ + 1, красные сплошные |
|
ку точного частного решения = − |
|||||
|
|
|
|
2 |
|
3.4. Численное решение задачи Коши |
47 |
линии –– аппроксимирующим ломаным, а красные символы «∙» различного размера –– узлам сеточной функции ( , ) на сетках с различным шагом .
Рис. 3.6. Аппроксимация решения задачи Коши ломаными Эйлера на
отрезке [0, |
8 ] |
с шагами сеток |
1 = 2 |
, |
2 = 1 |
и |
3 = 1 |
|
5 |
5 |
5 |
|
10 |
||||
Нетрудно заметить, что решение поставленной задачи Коши по методу Эйлера даёт лишь одностороннее приближение и порождает систематическую ошибку при аппроксимации решения сеточной функцией. Из рис.3.6 видно, что уменьшение шага сетки в два и в четыре раза приводит к аналогичному сокращению погрешности, что говорит о первом порядке точности ( ) метода Эйлера.
Для улучшения аппроксимации решения задачи Коши можно использовать конечно-разностные методы второго порядка точности, например, методы типа предиктор-корректор.
3.4.2. Метод Эйлера–Коши
Разностная схема типа предиктор-корректор, построенная на основе явного метода Эйлера, получила название метода Эйлера–Коши и основана на формуле:
= −1 + · |
( |
− |
1, |
− |
1) + ( , ) |
, |
(3.19) |
|
|
2 |
48 3. Элементы вычислительной математики
где второе слагаемое в правой части содержит полусумму значений функции ( , ) в предшествующей ( − 1) и искомой точках. Поскольку искомое значение в точке ( − 1) не известно, то в общем случае это приводит к появлению на каждом шаге нелинейного уравнения вида = ( −1, , −1, ), для решения которого в разностной схеме Эйлера–Коши используется описанный в разделе 3.2.3 метод простой итерации.
В результате схема Эйлера–Коши разбивается на две стадии. На стадии предиктора оценка искомого значения вычисляется по явно-
му методу Эйлера * = |
− |
1 + · ( |
− |
1, |
− |
1). На стадии корректора |
||||||
|
|
|
|
|
|
|
|
|
|
|||
полученная оценка * |
подставляется в правую часть (3.19) и нахо- |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
дится искомое значение . В результате получается формула явного |
||||||||||||
двухшагового метода Эйлера–Коши: |
|
|
|
|||||||||
= |
− |
1 + |
· |
( −1, −1) + ( , −1 |
+ · ( −1, −1)) |
. (3.20) |
||||||
|
|
|
|
|
|
|
2 |
|
|
|
||
Пример 3.9. Решить задачу Коши для обыкновенного дифферен-
циального уравнения ′ = − с начальным условием (0) = 1 , ис- |
||||||
пользуя метод Эйлера–Коши на отрезке [0, 8 |
2 |
|||||
] для равномерных |
||||||
|
|
|
5 |
|
||
сеток с шагами 1 = 2 |
, 2 = 1 |
и 3 = |
1 |
, и сопоставить полученные |
||
10 |
||||||
5 |
5 |
|
|
|
||
аппроксимации с точным решением. |
|
|
|
|||
Для решения поставленной задачи в листинге 3.9 : (%i1)–(%o5) задаются границы интервала «a:0», «b:1.6» и начальное значение функции «ya:0.5». Затем определяются вектор значения шага сетки «h:[0.4,0.2,0.1]» и функция, соответствующая значениям первой производной в заданных точках «f(x,y)». Далее в 3.9 : (%i6)– (%o8) задаются формулы для нахождения абсцисс «x[i,j]» и ординат «y[i,j]», «z[i,j]» сеточных функций в зависимости от номера узла «i» и шага сетки «j». После применения начальных условий в 3.9 : (%i9)–(%o15) генерируются списки координат сеточных функций, соответствующих значениям шага сетки «dots1», «dots2» и «dots3». Для контроля качества построенных аппроксимаций в 3.9 : (%i18)–(%o19) находится точное решение исходной задачи Коши в символьном виде.
Листинг 3.9 Решение задачи Коши методом Эйлера–Коши
(%i1) a:0$ b:1.6$ ya:0.5$
h:[0.4,0.2,0.1]$
f(x,y):=y-x;
|
3.4. Численное решение задачи Коши |
49 |
||||||
(%o5) |
( , ) := − |
|
|
|
|
|
|
|
(%i6) |
x[i,j]:=a+h[j]*i; |
|
|
|
|
|
|
|
|
y[i,j]:=y[i-1,j]+h[j]*f(x[i-1,j],y[i-1,j]); |
|
||||||
|
z[i,j]:=z[i-1,j]+h[j]*(f(x[i-1,j],z[i-1,j])+ |
|
||||||
|
|
|
|
f(x[i,j],y[i,j]))/2; |
|
|||
(%o6) |
, := + |
|
|
|
|
|
|
|
(%o7) |
, := −1, + ( −1, , −1, ) |
|
||||||
(%o8) |
, := −1, + |
( ( |
− |
1, , |
− |
1, ) + ( , , , )) |
|
|
|
|
2 |
|
|
||||
|
|
|
|
|
|
|
|
|
(%i9) |
y[0,1]:ya$ y[0,2]:ya$ y[0,3]:ya$ |
|
||||||
z[0,1]:ya$ z[0,2]:ya$ z[0,3]:ya$
dots1:makelist([x[i,1],z[i,1]],i,0,(b-a)/h[1]);
dots2:makelist([x[i,2],z[i,2]],i,0,(b-a)/h[2])$
dots3:makelist([x[i,3],z[i,3]],i,0,(b-a)/h[3])$
(%o15) [[0,0.5],[0.4,0.66],[0.8,0.716],[1.2,0.6248],[1.6,0.3256]] (%i18) ode2(’diff(y,x)=f(x,y),y,x);
ic1(%,x=a,y=ya);
(%o18) = (% − (− − 1)% − )%
rat: replaced -0.5 by -1/2 = -0.5
(%o19) = −% −22 − 2
На рис.3.7 показана аппроксимация решения задачи Коши лома-
ными Эйлера–Коши на отрезке [0, 8 |
] на регулярных сетках при |
|||||
|
|
|
5 |
|
||
1 |
= 2 |
, 2 = 1 |
и 3 = |
1 |
. Чёрная утолщённая линия соответствует |
|
|
||||||
|
5 |
5 |
10 |
|
|
|
графику точного частного решения = − + + 1, красные сплош-
2
ные линии –– аппроксимирующим ломаным, а красные символы «∙»
различного размера –– узлам сеточной функции ( , ) на сетках с различным шагом .
Сопоставление решений поставленной задачи Коши методами Эйлера и Эйлера–Коши на рис. 3.6 и 3.7 наглядно демонстрирует, что переход к методам второго порядке точности ( 2) обеспечивает существенно меньшую ошибку аппроксимации при одних и тех же значениях шага сетки.
Для дальнейшего улучшения аппроксимации решения задачи Коши можно использовать конечно-разностные методы более высоких порядков точности, например, методы Рунге–Кутты.
