Решение обыкновенных дифференциальных уравнений. Метод Эйлера

КОБЕЦ Е.В.

ЛЕКЦИОННЫЙ МАТЕРИАЛ

ПО ДИСЦИПЛИНЕ «КОМПЬЮТЕРНОЕ

ОБЕСПЕЧЕНИЕ»

 

Решение обыкновенных дифференциальных уравнений. Метод Эйлера

Обыкновенные дифференциальные уравнения встречаются достаточно часто в различных прикладных задачах. Ими описываются задачи движения систем материальных точек, электрических цепей и др.

Определения:

Дифференциальным называется такое уравнение, которое связывает независимую переменную Х, ее функцию y=f(x) и производные этой функции .

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

F(x, y, )=0.

Порядок старшей производной, входящей в это уравнение, называется порядком дифференциального уравнения.

Если y=f(x) – функция одного независимого переменного Х, дифференциальное уравнение называется обыкновенным, если же y=f(x1,x2,…xn) – функция n независимых переменных x1,x2,…xn, то уравнение называется уравнением в частных производных.

Решение обыкновенного дифференциального уравнения сводится к поиску функции y=f(x), которая при подстановке в уравнение обращает его в тождество.

Поиск решения такого уравнения называется его интегрированием, а полученное решение – интегралом этого уравнения.

Существуют общее и частное решения дифференциального уравнения.

Общим решением уравнения является функция y=φ(x,c), удовлетворяющая уравнению при любых значениях постоянного С.

Частное решение определяется конкретным значением С. Для нахождения частного решения необходимо указать начальные условия, т.е. задать значения y, при х=х0, т.е. y0=y(x0), …,

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

Мы рассматриваем уравнения разрешенными относительно старшей производной.

Их можно свести к системе n обыкновенных дифференциальных уравнений первого порядка заменой на неизвестную функцию Р1(х), на Р2(х) и т.д., т.е.

1 производная 2 производная
Исходное уравнение в новом виде

Причем, начальные условия:

Для решения мы будем рассматривать методы Эйлера и Рунге-Кутта.

 

Численное решение состоит в построении таблицы приближенных значений y1,y2,…,yn-1 точного решения y(x) уравнения .

Мы не знаем вида функции, не можем сразу вычислить значение функции. Знаем только начальные условия, значения Х0=а, y0=y(x0) и интервал [a,b], на котором необходимо проинтегрировать функцию.

Задача ставится так: в точках Х0,X1,…,Хn нужно найти приближения y0,y1,…,yn точного решения.

Первый шаг – разбиваем отрезок на конечное число узловых точек (узлы сетки). Шаг сетки h=(b-a)/n, Xi=a+ih, I=0,1,..,N.

Нужно восстановить значения искомой функции. Рассмотрим дифференциальное уравнение 1 порядка

Второй шаг – зная начальные условия вычисляем значение первой производной в точке Х0.

Третий шаг – в следующем узле сетки вычисляем значение функции.

На четвертом шаге все повторяется.

Геометрическая интерпритация метода состоит в замене интегральной кривой на отрезке касательной к ней в точке xi,yi. На каждом шаге заново определяется касательная, и, следовательно, соответствующая приближенному решению кривая будет ломаной линией. Поэтому метод называют еще методом ломаных.

Схема вычислений: xi=a+ih (I=0,1,…,N)

Т.е. имея известную точку, вычисляем следующую. Это схема вычислений для уравнения 1 порядка.

Метод Эйлера для уравнений 2 порядка надо уравнение с начальными условиями свести к системе 2 уравнений 1-го порядка:

Производные берутся в точке х.

Итерационная формула вычислений:

На практике вычисления проводятся снизу вверх: вначале вычисляется 1 производную, т.е. pi, а затем вторую Yi.

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

 

Пример. На отрезке [a,b] составить таблицу значений приближенного решения дифференциального уравнения , удовлетворяющего начальным условиям

Y(0)=1, Y΄(0)=2. шаг интегрирования h=0,2, точность ε=0,001. Предусмотреть печать значений точного решения y=ex+x.

Преобразуем y΄=p

p΄=3p-2y+2x-3

y(0)=1

p(0)=2.

 

Нужен массив Х – значений Х от 0 до 2

У – массив приближенных решений

Р – массив значений производной

Размерность –

(a-b)/h+ начальная точка = 2/0,2=10+1=11

 

Рассмотренный метод Эйлера относится к группе одношаговых методов, в которых для расчета точки (xi+1, yi+1) требуется информация о последней вычислительной точке (xi, yi).

Численное решение состоит в построении таблицы приближенных значений y1, y2, y3, …,yn-1 точного решения y(x) уравнения y¢=f(x,y), a£x£b при начальном условии y(x0)=y0, x0=a на выбранной последовательности точек xi=x0+ih. Функция y зависит от аргумента х

y(xi+1)=y(xi)+h f(xi, y(xi)), i=0,1,2,…n-1

 

           
 
 
   
     
 

 


нет

 
 

 


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

Погрешность аппроксимации разностными уравнениями равна величине отброшенного остаточного члена ряда Тейлора O(hp+1).

Принято считать, если расчетные формулы численного метода согласуются с разложением в ряд Тейлора до членов порядка hp, то число р называют порядком точности метода.

В методе Эйлера сравнение формулы вычисления с разложением в ряд Тейлора согласуется до первого порядка по h, т.е. метод имеет первый порядок точности с локальной погрешностью O(h2)

Для метода Эйлера погрешность равна h2.

 

 

10.2. ЧИСЛЕННЫЙ МЕТОД ПОСТРОЕНИЯ ГРАФИКОВ

При решении задач на ЭВМ важное значение имеет наглядность и удобство быстрого восприятия изучаемых явлений. После освоения средств графического режима Турбо Паскаля можно строить графики, а также получать различные геометрические фигуры. Какие бы изображения не выводились на экран, все они строятся из точек, группы которых в свою очередь образуют отрезки и кривые. Вывод точки осуществляется процедурой PutPixel(X, Y, Color), где Х и Y-координаты экрана, где будет расположена точка. Color — ее цвет.

Для построения графика функции необходимо осуществить следующие операции:

1) Табулирование функции;

2) Нахождение максимального и минимального значений функции;

3) Формирование и вывод графика на экран.

Рассмотрим применение графического режима на примере построения графика функции Y(x)= xз/(2(x+1)(x + 1)) в области изменения х Î [-5,-1)U(-1, 5] с шагом h, а также построения асимптоты, заданной выражением Y(x) = х/2 - 1.

Табулирование функции можно осуществить с помощью следующих операторов:

х := xStart;

h : = (xEnd - xStart) / (n - 1) ;

for i : = 1 to n do begin

y[ i ] :=F(x);

if y[ i ] < - 6 then

y[ i ] := - 6;

x : = x + h;

end;

Здесь введены имена переменных: xStart — начальное значение аргумента, xEnd — конечное значение аргумента, n — число точек в строке. Шаг изменения аргумента X определяется выражением:

h := (xEnd -xStart )/( n - 1);

В организованном цикле табулирования функции вычисляются значения Y(x), используя подпрограмму — функцию с именем F. Индекс каждого значения Х и соответствующее ему значение Y(x), будут помещаться в определенные элементы массива У. В точке Х=-1 заданная функция не определена, поэтому необходимо исключить из построения участок графика в окрестности этой точки. Это достигается программным путем применением операторов

if y[ i ] < - 6 then y[ i ] := - 6;

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

if y[ i ]>a then

y[ i ] :=a;

где а — уровень ограничения.

Для определения масштаба вычерчиваемого графика необходимо найти минимальное и максимальное значения элементов массива Y. Это достигается с помощью операторов

уМах:=у[ 1 ];

yMin :=y[ 1 ];

for i := 1 to n do begin

if y[ i ] > yMax then

yMax := y[ i ];

if y[i] < yMin then

yMin := y[i];

end;

В результате выполнения этого фрагмента программы минимальное значение функции будет храниться в переменной yMin, а максимальное значение — в переменной yMax. Эти значения используются для задания масштаба, чтобы минимальное и максимальное значения функции изображались точками, отстоящими друг от друга не более чем на ширину экрана. Кроме того, они используются при формировании вертикальной и горизонтальной сетки, а также при задании оси абсцисс. Зависимости, по которым определяются эти параметры, приводятся в программе с подробными комментариями.

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

InitGraph(имя_драйвера, режим, путь_к_драйверу);

В модуле Graph имеется более 70 подпрограмм. Рассмотрим необходимые процедуры для построения графика функции У= f(x) в заданном интервале изменения Х с заданным шагом h.

Для формирования заголовка графика молено использовать следующие процедуры:

SetTextStule(Font, Direct, CharSize); —процедура вывода текста с указанием вида шрифта, наклона и его размера. Вид шрифта (параметр Font) в модуле Graph определяется константами:

DefaultPont = 0 (матричный шрифт);

TriplexPont = 1 (жирный шрифт);

SmallFont = 2 (тонкий шрифт);

SansSerifPont = 3 (прямой шрифт);

GothicPont = 4 (готический шрифт).

Для определения направления вывода текста используются константы: Horizdir = 0 (слева направо) или VertDir = 1 (снизу вверх).

Третий параметр определяет размер шрифта. Если CharSize = 1, то символы имеют обычные размеры (8х8 пикселей), если Char-Size == 2, то символы имеют размеры 16х16 пикселей. Максимальное значение константы равно 10.

Процедура SetTextJustify (код_горизонтали, код_вертикали) — устанавливает параметры для выдачи текста, в зависимости от кода.

Процедура OutTextXY(X, Y, текст) ; — обеспечивает вывод текста с координаты (X, Y).

При формировании оси X, горизонтальной и вертикальной сетки можно использовать следующие процедуры:

SetLineStile(тип_линии, определение_пользователем/ вид_линии); - определяется тип линии: solidin = 0 (сплошная линия), dottein = 1 (пунктирная линия), centerin = 2 (штрих-пунктирная линия), dashedin = 3 (штриховая линия), user-bitin = 4 (определенная пользователем линия); второй параметр имеет смысл только при userbitln=4, а вид линии задается константой nonnwidth = 1 (обычная толщина) или константой thickwidth = 3 (жирная линия);

SetColor (цвет) — определяет цвет символов и линий.

Для установки курсора в указанную координату используется процедура MoveTo, (X, Y), а для вычерчивания линии от текущей линии до указанной координаты — процедура LineTo (X, Y).

При работе с графическими изображениями необходимо использовать систему координат. В зависимости от выбранного графического режима устанавливается разрешающая способность экрана в 320х200, 640х480 или другое число точек (пикселей). Программным путем можно установить максимальное число пикселей в строке с помощью функции GetMaxX, а число строк— с помощью функции GetMaxY. Начало координат имеет значение (0, 0), центр экрана — (GetMaxX div 2, GetMaxY div 2), а правый нижний угол — (GetMaxX, GetMaxY). При выполнении графических операций всегда указывается, что должен делать курсор, однако сам курсор в графическом режиме невидимый.