Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tema_5_Lektsia_5.rtf
Скачиваний:
1
Добавлен:
13.11.2019
Размер:
51.76 Кб
Скачать

Тема 5. Алгоритмы решения дифференциальных уравнений. 4 часа

5.1 Постановка задачи о численном решении обыкновенного дифференциального уравнения.

Обыкновенным дифференциальным уравнением называется равенство

f(x, y, y', y'', ..., y(n)) = 0 (5.1),

в котором x — независимая переменная, изменяющаяся в некотором отрезке [a, b], а y — неизвестная функция от x, которую и надо найти. Различают два типа обыкновенных дифференциальных уравнений — уравнения без начальных условий и уравнения с начальными условиями. Уравнения без начальных условий — это как раз то, что было только что определено. А уравнение с начальными условиями — это записанное выше уравнение относительно функции y, но в котором требуется найти лишь такую функцию y, которая удовлетворяет при некоторомследующим условиям:

y(c) = y0, y'(c) = y'0, y''(c) = y''0, ..., y(n-1)(c) = y(n-1)0, т.е. в точке c функция y и ее первые n-1 производных принимают наперед заданные значения. В этой ситуации число n называется порядком уравнения.

Метод Эйлера численного решения обыкновенного дифференциального уравнения.

Предположим, что порядок уравнения (4.8) равен 1 и, более того, его

можно представить виде:

y' = f(x,y) (4.9)

В случае первого порядка начальные условия превращаются в единственное равенство: y(c) = y0.

Искомая функция при численном подходе к проблеме решения всегда воспринимается через какую-то таблицу своих значений; иными словами, по заданным значениям аргумента надо найти такие y = y0, y1, ..., yn, чтобы таблица

x

x1

x2

x3

...

xn

f(x)

y1

y2

y3

...

yn

оказалась таблицей значений искомой функции. Для этого, в свою очередь, достаточно по заданному значению уметь находить значение в любой точке. Вот метод Эйлера для этого последнего поиска:

1й шаг. Фиксируем точность, с которой нужно найти значение .

Обозначим это число через ε. Поясним, что это означает, что числа, отличающиеся меньше, чем на ε, считаются одинаковыми.

2й шаг. Фиксируем произвольное n и разделим отрезок [a, b] на n равных частей: a = x0 < x1 < ... < xn = b, где , xi = a + i·h, i = 1,2, ..., n.

3й шаг. Построим последовательность чисел

yi = yi-1 + h·f(xi-1, yi-1), i = 1, 2, ..., n, в которой, напомним, y0 = y(c). Обозначим yn через U.

4й шаг. Заменим n на n+1 и повторим шаги 2 и 3. Полученное число yn (т.е. последнее из вычисляемых на шаге 3) обозначим теперь через V.

5й шаг. Если окажется, что числа V и U отличаются друг от друга меньше, чем на ε, то число y(b) считается найденным и равным V. В противном случае переобозначим V через U и вернемся к шагу 4.

Можно доказать, что когда функция f(x, y) представленная на (4.9) имеет непрерывные частные производные, описанный процесс обязательно конечен и ответ находится действительно с любой наперед заданной точностью.

#include <stdafx.h>

#include "eulerm.h"

/*************************************************************************

Модифицированный метод Эйлера решения уравнения первого порядка.

Алгоритм численно интегрирует обыкновенное дифференциальное уравнение с

использованием модифицированного прямого метода Эйлера.

*************************************************************************/

double solveodeeulerm(double x, const double& x1, double y, const int& n)

{

double result;

int i;

double f1;

double h;

double y1;

h = (x1-x)/n;

y1 = y;

i = 1;

do

{

f1 = f(x, y);

x = x+h;

y = y+f1*h;

y = y1+h*(f1+f(x, y))/2;

y1 = y;

i = i+1;

}

while(i<=n);

result = y;

return result;

}

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