русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-05-02; просмотров: 1336; Нарушение авторских прав


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

(1)

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

(2)

(3)

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

. (4)

Введем по переменному t равномерную сетку с шагом 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 видно, что метод приближенного решения по симметричной схеме дает более точное решение.

 



<== предыдущая лекция | следующая лекция ==>
Приближенное вычисление интегралов | Лекция 22. Стратегия.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.126 сек.