Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 15 Численные методы.docx
Скачиваний:
38
Добавлен:
20.05.2015
Размер:
110.82 Кб
Скачать

15.4. Линейные дифференциальные уравнения

Рассмотрим задачу Коши для системы обыкновенных дифференциальных уравнений

(1)

или подробнее

(2)

(3)

Существует две группы численных методов решения задачи Коши: многошаговые разностные методы и методы Рунге-Кутта. Приведем примеры и поясним основные понятия, возникающие при использовании численных методов. Для простоты будем рассматривать одно уравнение

. (4)

Введем по переменному t равномерную сетку с шагом >0, т.е рассмотрим множество точек

.

Будем обозначать через u(t) точное решение задачи (4), а через yn=y(tn) – приближенное решение. Заметим, что приближенное решение является сеточной функцией, т.е. определено только в точках сетки .

Пример 1. Метод Эйлера. Уравнение (4) заменяется разностным уравнением

. (5)

Решение этого уравнения находится явным образом по рекуррентной формуле

Пример 2. Симметричная схема. Уравнение (4) заменяется разностным уравнением

. (6)

Данный метод более сложен в реализации, чем метод Эйлера (5), так как новое решение yn+1 определяется по найденному ранее yn путем решения уравнения

,

где . По этой причине метод называется неявным. Преимуществом метода (7) по сравнению с методом (5) является более высокий порядок точности.

Приведенные примеры представляют собой простейшие случаи разностных методов. Методы Рунге-Кутта отличаются от разностных методов тем, что в них допускается вычисление правых частей f(t,u) не только в точках сетки, но и в некоторых промежуточных точках.

Пример 3. Метод Рунге-Кутта второго порядка точности. Предположим, что известно приближенное значение yn решения исходной задачи в момент t=tn. Для нахождения yn+1 = y(tn+1) поступим следующим образом. Сначала, используя схему Эйлера

,

Вычислим промежуточное значение , а затем воспользуемся разностным уравнением

,

из которого явным образом найдем искомое значение .

Реализация метода в виде двух этапов (8), (9) называется метод предиктор-корректор (предсказывающее-исправляющим), т.к. на первом этапе (8) приближенное значение предсказывается с невысокой точностью О(), а на втором этапе (9) точность имеет второй порядок по.

В качестве примера рассмотрим линейное дифференциальное уравнение:

.

Это уравнение имеет точное решение .

Код для реализации метода Эйлера показан в листинге

Листинг 15.5. Решение уравнения методом Эйлера

a = 0; b = 2; m = 50;

dx = (b - a) / m;

x = 0, y = 1;

for (int i = 1; i <= m; i++)

{

y += dx*F(x,y);

x += dx;

g.DrawEllipse(Pens.Black, II(x) - 2,

JJ(y) - 2, 4, 4);

}

Для симметричной схемы уравнение (6) принимает вид:

и его удается решить явно:

.

Код для решения уравнения по симметричной схеме представлен ниже:

Листинг 15.6. Решение уравнения по симметричной схеме

a = 0; b = 2; m = 50; dx=(b-a)/m; x = 0; y = 1;

for (int i = 1; i <= m; i++)

{

y = (y+dx/2*F(x,y))/(1-(x+dx)*dx/2);

x += dx;

g.FillEllipse(myBrush,II(x)-3, JJ(y)-3,6,6);

}

В следующем листинге 15.7 представлен код для реализации метода Рунге-Кутта:

Листинг 15.7. Решение уравнения методом Рунге-Кутта

a = 0; b = 2; m = 50;

dx = (b - a) / m;

x = 0; y = 1; yt = 0;

for (int i = 1; i <= m; i++)

{

yt = y + dx / 2 * F6(x, y);

y = y + dx / 2 * F6(x + dx / 2, yt);

x += dx;

g.FillEllipse(myBrush,II(x)-2,JJ(y) - 2, 4, 4);

}

На рис. 15.6 на интервале [0,2] представлено точное решение (сплошная линия), приближенное решение по методу Эйлера (маленькие черные точки), по симметричной схеме (большие черные точки) и методом Рунге-Кутта (белые точки).

Рис. 15.6. Сравнение точного и приближенных решений линейного уравнения

Из рис. 15.6 видно, что метод приближенного решения по симметричной схеме дает более точное решение.

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