1348

Методы решения дифференциальных уравнений. Метод Эйлера-Коши и усовершенствованный метод Эйлера

Курсовая

Информатика, кибернетика и программирование

Численное дифференцирование. Усовершенствованный метод Эйлера. Решение задачи усовершенствованным методом Эйлера. Блок-схема алгоритма к усовершенствованному методу Эйлера. Реализация на ЭВМ тестового примера усовершенствованного метода Эйлера.

Русский

2013-01-06

6.12 MB

930 чел.

Введение

При решении научных и инженерно-технических задач часто бывает необходимо математически описать какую-либо динамическую систему. Лучше всего это делать в виде дифференциальных уравнений (ДУ) или системы дифференциальных уравнений. Наиболее часто они такая задача возникает при решении проблем, связанных с моделированием кинетики химических реакций и различных явлений переноса (тепла, массы, импульса) – теплообмена, перемешивания, сушки, адсорбции, при описании движения макро- и микрочастиц.

В ряде случаев дифференциальное уравнение можно преобразовать к виду, в котором старшая производная выражена в явном виде. Такая форма записи называется уравнением, разрешенным относительно старшей производной  (при этом в правой части уравнения старшая производная отсутствует):

Решением обыкновенного дифференциального уравнения называется такая функция y(x), которая при любых х удовлетворяет этому уравнению в определенном конечном или бесконечном интервале. Процесс решения дифференциального уравнения называют интегрированием дифференциального уравнения.

Исторически первым и наиболее простым способом численного решения задачи Коши дляОДУ первого порядка является метод Эйлера. В его основе лежит аппроксимация производной отношением конечных приращений зависимой (y) и независимой (x) переменных между узлами равномерной сетки:

где yi+1  это искомое значение функции в точке xi+1.

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

Данная формула оказывается неявной относительно yi+1 (это значение есть и в левой и в правой части выражения), то есть является уравнением относительно yi+1, решать которое можно, например, численно, применяя какой-либо итерационный метод (в таком виде его можно рассматривать как итерационную формула метода простой итерации).

Состав курсовой работы: Курсовая работа состоит из трех частей. В первой части краткое описание  методов. Во второй части постановка и решение задачи. В третьей части – программная реализация на языке ЭВМ

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

1. Теоретическая часть

Численное дифференцирование

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

  1.  Обыкновенные дифференциальные уравнения (ОДУ)
  2.  Дифференциальные уравнения в частных производных.

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

                               (1)

независимая переменная

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

Простейшим (линейным) ОДУ является уравнение (1) порядка разрешенное относительно производной

(2)

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

Основная задача,  связанная с линейной ОДУ известно как задача Каши:

Найти решение уравнения (2) в виде функции  удовлетворяющий начальному условию                                               (3)

Геометрически это означает, что требуется найти интегральную кривую, проходящую через точку ) при выполнение равенства (2).

Численный  с точки зрения задачи Каши означает: требуется построить таблицу значений функции  удовлетворяющий уравнение (2) и начальное условие (3) на отрезке с некоторым шагом . Обычно считается, что то есть начальное условие задано в левом конце отрезка.

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

Пусть дано уравнение (2)   с начальным условием  тоесть поставлена задача Каши. Решим вначале следующую задачу. Найти простейшим способом приближенное значение  решения в некоторой точке где -достаточно малый шаг. Уравнение (2) совместно с начальным условием (3) задают направление касательной искомой интегральной кривой в точке   с координатами

Уравнение касательной имеет вид

Двигаясь  вдоль  этой касательной, получим приближенное значение решения в точке :

или

                                     (4)

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

. Заметим, что эта прямая не является касательной к реальной интегральной кривой, поскольку точка  нам не доступна, однако если достаточно мало то получаемые приближенные будут близки к точным значениям решения.

Продолжая эту идею, построим систему равно отстоящих точек

.

Получение таблицы значений искомой функции

по методу Эйлера заключается в циклическом применение формулы

                                   (5)

Рисунок 1. Графическая интерпретация метода Эйлера

Методы численного интегрирования дифференциальных уравнений, в которых решения получаются от одного узла к другому, называются пошаговыми. Метод Эйлера самый простой представитель пошаговых методов. Особенностью любого пошагового метода является то, что начиная со второго шага исходное значение  в формуле (5) само является приближенным, то есть погрешность на каждом следующем шаге систематически возрастает. Наиболее используемым методом оценки точности пошаговых методов приближенного численного решения ОДУ является способ двойного прохождения заданного отрезка с шагом  и с шагом

1.1 Усовершенствованный метод Эйлера

Основная идея этого метода: вычисляемое по формуле (5) очередное значение будет точнее, если значение производной, то есть угловой коэффициент прямой замещающей интегральную кривую на отрезке  будет вычисляться не по левому краю (то есть в точке ), а по центру отрезка . Но так как значение производной между точками  не вычисляется, то перейдем к сдвоенным участкам центром, в которых является точка , при этом уравнение прямой получает вид:

                             (6)

       А формула (5) получает вид

                          (7)

Формула (7) применена только для , следовательно, значения  по ней получить нельзя, поэтому  находят по методу Эйлера, при этом для получения более точного результата поступают так: с начало по формуле (5) находят значение

                                     (8)

        В точке  а затем находится по формуле (7) с шагом

                                     (9)

      После того как  найдено дальнейшие вычисления при  производится по формуле (7)

….

1.2 Метод Эйлера-Коши


(10)                                  

                            (11)

Геометрически это означает, что с начало определяется направление интегральной кривой в исходной точке  и во вспомогательной точке , а в качестве окончательного направления берется среднее значение этих направлений.

2. Постановка и решение задачи

Решить дифференциальное уравнения усовершенствованным методом Эйлера и методом Эйлера-Коши на примере уравнения н.у

с точностью  

2.1 Решение задачи усовершенствованным методом Эйлера

Решить дифференциальное уравнения усовершенствованным методом Эйлера на примере уравнения н.у с точностью  

берем шаг  , находим :

Находим

Находим значения искомой функции

 

 

 

 

 

берем шаг  ,находим :

Находим

Находим значения искомой функции

 

 

 

 

Находим максимум разностей значений

Наибольшее из

Так как наибольшее из  больше чем  мы дальше находим значения искомой функции.

       Находим шаг

Находим

Находим значения искомой функции

 

 

 

 

 

 

 

 

Находим максимум разностей значений

Наибольшее из    

2.2  Метод Эйлера-Коши

Решить дифференциальное уравнения методом Эйлера-Кошина примере уравнения н.ус точностью  

   берем шаг  , находим :


Находим

Находим значения искомой функции

 

 

 

 

 

берем шаг  ,находим

Находим

Находим значения искомой функции

 

 

 

 

Находим максимум разностей значений

Наибольшее и

3 Программная реализация

3.1 Блок схемы алгоритмов

Блок-схема алгоритма к методу Эйлера-Коши

 нет да

Блок-схема алгоритма к усовершенствованному методу Эйлера

 нет да

3.2 Тексты программ

Текст программы  усовершенствованного метода Эйлера на языке Delphi

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Grids;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Edit4: TEdit;

   Edit5: TEdit;

   Edit6: TEdit;

   Edit7: TEdit;

   Button1: TButton;

   StringGrid1: TStringGrid;

   StringGrid2: TStringGrid;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

   Label8: TLabel;

   Label9: TLabel;

   procedure Button1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var y,x,g,a,b,x0,y0,h,e,g2,m:real; z,n,k,k2,i,i2:longint;    fx:string;

xz,xd,a1,a2:array[1..10000] of real;   x3:string;

function f(x,y:real):real;

begin

f:= (6*x+y-3)/(5*y+2*x);

end;

begin

a:=strtofloat(edit1.text);

b:=strtofloat(edit2.text);

x0:=strtofloat(edit3.text);

y0:=strtofloat(edit4.text);

h:=strtofloat(edit5.text);

e:=strtofloat(edit6.text);

if a>b then showmessage('Введите границы правильно') else

if (e>=1) or (e<=0) then showmessage ('Введите погрешность правильно') else

begin

g:=100;  k2:=0;    n:=0; i:=0; k:=0;   y:=0; x:=0; x0:=0; y0:=1;

while   g>e do

begin

 g2:=0;

 n:=trunc((b-a)/h);

 k:=0;

 x:=0;

 y:=y0+h/2*f(x0,y0);

 x:=x0+h/2;

 k2:=k2+1;

 k:=k+1;

 y:=y0+h*f(x,y);

 x:=x0+h;

 if k2 mod 2<>0then a1[k]:=y else a2[k]:=y;

 k:=k+1;

 y:=y0+2*h*f(x,y);

 x:=x+h;

 if k2 mod 2<>0then a1[k]:=y else a2[k]:=y;

 while x<b do

  begin

   k:=k+1;

   if k2 mod 2<>0then y:=a1[k-2]+2*h*f(x,y) else y:=a2[k-2]+2*h*f(x,y);

   x:=x+h;

   if k2 mod 2<>0then a1[k]:=y else a2[k]:=y;

 end;

 h:=h/2;

 n:=trunc(n/2);

 i:=0;  i2:=1;

 if k2>1 then

 while i<>n do

  begin

   i:=i+1;

   if (k2 mod 2<>0) and (g2<abs(a1[i*2]-a2[i])) then  g2:=abs(a1[i*2]-a2[i]);

   if (k2 mod 2=0) and (g2<abs(a1[i]-a2[i*2])) then  g2:=abs(a1[i]-a2[i*2]);

   xz[i]:=g2;

  end;

if k2>1 then g:=g2;

 end;

stringgrid1.FixedCols:=0;

stringgrid1.rowcount:=n*2+1;

stringgrid1.ColCount:=1;

stringgrid2.FixedCols:=0;

stringgrid2.rowcount:=n*2+1;

stringgrid2.ColCount:=1;

{"stringgrid3.FixedCols:=0;

stringgrid3.rowcount:=n*2+1;

stringgrid3.ColCount:=1;  }

 z:=0;

 i2:=i2-2;

for z:=1 to n*2 do

begin

{ x3:=floattostrf(xz[z],fffixed,10,2);   }

 {if z<=n+1 then  stringgrid3.Cells[0,z*2]:=floattostrf(xz[z],fffixed,10,8); }

           if k2 mod 2=0 then begin

if z<=n+1 then stringgrid1.Cells[0,z*2]:=floattostr(a1[z]);

 stringgrid2.Cells[0,z]:=floattostr(a2[z]);

     end else begin

 if z<=n+1 then stringgrid1.Cells[0,z*2]:=floattostr(a2[z]);

stringgrid2.Cells[0,z]:=floattostr(a1[z]);

end;     end;

edit7.text:=floattostrf(g,fffixed,10,8);

end; end;

 end.

Текст программы метода  Эйлера-Коши на языке Delphi

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, jpeg, ExtCtrls;

type

 TForm1 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   ListBox1: TListBox;

   Edit1: TEdit;

   Edit2: TEdit;

   Edit3: TEdit;

   Edit4: TEdit;

   Edit5: TEdit;

   Button1: TButton;

   Label6: TLabel;

   Label9: TLabel;

   procedure Button1Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form1: TForm1;

 x,y,y1:array [0..257] of real;

n,a,b,i,c:integer;

h,E,p:real;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

y[0]:=Strtofloat(Edit1.text);

h:=Strtofloat(Edit4.text);

if h<=0 then showmessage('Ââåäèòå øàã ïðàâèëüíî')

else

begin

a:=StrtoInt(Edit2.text);

b:=StrtoInt(Edit3.text);

if a>b then showmessage('Ââåäèòå ãðàíèöû îòðåçêà ïðàâèëüíî')

else

begin

E:=Strtofloat(Edit5.text);

if E<=0 then showmessage('Ââåäèòå ïîãðåøíîñòü ïðàâèëüíî')

else

begin

x[0]:=a;

n:=trunc((b-a)/h);

for i:=1 to n do      begin

x[i]:=x[i-1]+h;

end;

for i:=1 to n do begin

p:=y[i-1]+h*(((6*x[i-1])+y[i-1]-3)/((5*y[i-1])+(2*x[i-1])));

y[i]:=y[i-1]+ (h/2)*(((6*x[i-1])+y[i-1]-3)/((5*y[i-1])+(2*x[i-1]))+((6*x[i])+p-3)/((5*p)+(2*x[i])));

end;

h:=h/2;

for i:=1 to n do

x[i]:=0;

n:=trunc((b-a)/h);

for i:=1 to n do        begin

x[i]:=x[i-1]+h;

       end;

y1[0]:=y[0];

for i:=1 to n do begin

p:=y1[i-1]+h*(((6*x[i-1])+y1[i-1]-3)/((5*y1[i-1])+(2*x[i-1])));

y1[i]:=y1[i-1]+ (h/2)*(((6*x[i-1])+y1[i-1]-3)/((5*y1[i-1])+(2*x[i-1]))+((6*x[i])+p-3)/((5*p)+(2*x[i])));

end;

repeat

c:=0;

for i:=1 to n do begin

if abs(y[i]-y1[2*i])>E then c:=c+1; end;

if c=0 then begin

for i:=1 to n do

listbox1.Items.Add(floattostr(y1[i]));

end

else begin

for i:=1 to n do begin

y[i]:=y1[i];

x[i]:=0; end;

h:=h/2;

n:=trunc((b-a)/h);

for i:=1 to n do        begin

x[i]:=x[i-1]+h;

end;

y1[0]:=y[0];

for i:=1 to n do begin

p:=y1[i-1]+h*(((6*x[i-1])+y1[i-1]-3)/((5*y1[i-1])+(2*x[i-1])));

y1[i]:=y1[i-1]+ (h/2)*(((6*x[i-1])+y1[i-1]-3)/((5*y1[i-1])+(2*x[i-1]))+((6*x[i])+p-3)/((5*p)+(2*x[i])));

end;end;

until c=0;

end;end;end;end;

end.

3.3. Тестовые примеры

Возьмем в качестве примера уравнение н.у с точностью  .

Результат работы программы представлен на рисунке 2 а), б):

Рисунок 2 а) Реализация на ЭВМ тестового примера усовершенствованного

 метода Эйлера

Рисунок 2 б) Реализация на ЭВМ тестового примера метода Эйлера-Коши

Так, как заранее известно, решение уравнения  и оно совпадает с полученным в программе результатом, то можно сделать вывод о том, что программа работает верно.

Если введено а>b, то программа поступит следующим образом:

Рисунок 3 – Результат решения уравнения усовершенствованным методом Эйлера при введении а>b

Рисунок 4 – Результат решения уравнения методом Эйлера-Коши при введении а>b

Если погрешность введена не правильно, то программа поступит следующим образом:

Рисунок 5 – Результат решения уравнения усовершенствованным методом Эйлера при не правильно введенной погрешности

Рисунок 6 – Результат решения уравнения методом Эйлера-Коши при  не правильно введенной погрешности

3.4. Решение задачи с помощью ЭВМ

Возьмем в качестве примера уравнение н.у с точностью  .

При решении заданного уравнения на языке программирования Borland Delphi, мы получаем следующие результаты (рисунок 3):

Рисунок 7 Реализация на ЭВМ метода Эйлера-Коши

Возьмем в качестве примера уравнение н.у с точностью  .

При решении заданного уравнения на языке программирования Borland Delphi, мы получаем следующие результаты (рисунок 4):

Рисунок 8 Реализация на ЭВМ усовершенствованного метода Эйлера

В таблицах 1 и 2 представлен результат работы программ при задании различных исходных данных.

Таблица 1 - Результаты работы программы для усовершенствованного метода Эйлера

Входные данные

y(нулевое)

Левая граница

Правая граница

Погрешность

Шаг

Результат:

Таблица 2 - Результаты работы программы для метода Эйлера-Коши

Входные данные

y(нулевое)

Левая граница

Правая граница

Погрешность

Шаг

Результат:

Заключение

Таким образом, очевидно, что при вычислении дифференциального уравнения  методами Эйлера-Коши и Усовершенствованный метод Эйлера  решение не дает нам точного значения, а только приближенное.

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

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

Программы написаны на языке Borland Delphi для решения дифференциальных уравнений. Полученные в результате работы программ решения совпадают с ответами в примере

Список используемой литературы

  1.  Каханер Д., Моулер К., Нэш С. Численные методы и программное обеспечение (пер. с англ.). М.: Мир, 2001, 575 c.
  2.  Самарский А. А., Гулин А. В. Численные методы: Учеб. пособие для вузов. — М.: Наука. Гл. ред. физ-мат. лит., 1989. — 432 с.


Начало

,, ,

Конец

Начало

,, ,

Конец

  1.  

 

А также другие работы, которые могут Вас заинтересовать

13311. Дослідження локального регулятора SIPARD DR21 для керування технологічною ділянкою 1.8 MB
  Тема: Дослідження локального регулятора SIPARD DR21 для керування технологічною ділянкою Мета: Навчитись працювати з локальними регуляторами SIPARD DR21 для керування технологічною ділянкою 1. Вступ Автоматизація виробництва завжди була однією з основних складових
13312. Исследование взаимосвязи содержания Я-концепция ребёнка с ДЦП с характером отношения родителей к болезни ребёнка 197.5 KB
  Очевидно, что семья играет важную роль в адаптации и интеграции ребенка в общество. Для гармоничного развития ребенка большое значение имеет и психологический микроклимат в семье. Семья, в которой живет «особый» ребенок, оказывается особой группой
13314. Дослідження характеристик регулюючих органів 1.41 MB
  Лабораторна робота №6 Тема: Дослідження характеристик регулюючих органів Мета: Навчитись вибирати регулюючі органи в залежності від вимог до системи управління 1.Вступ Автоматизація виробничих процесів створює певні технікоекономічні переваги у всіх галу
13315. Використання локальних регуляторів для управління моніторингу, контролю і аварійної сигналізації система при управлінні охолоджувальною технікою 1.9 MB
  Лабораторна робота № 8 Тема: Використання локальних регуляторів для управління моніторингу контролю і аварійної сигналізації система при управлінні охолоджувальною технікою. Мета: Навчитись працювати з локальними регуляторами для управління моніторингу контролю ...
13316. Визначення коефіцієнта лінійного розширення тіл методом Менделєєва 444 KB
  Лабораторна робота № 1 Визначення коефіцієнта лінійного розширення тіл методом Менделєєва. Мета роботи: аВивчення теплового розширення твердих тіл. бВизначення коефіцієнта лінійного розширення різних матеріалів методом Менделєєва. Прилади та матеріали: прил...
13317. ВИЗНАЧЕННЯ КОЕФІЦІЄНТА ПОВЕРХНЕВОГО НАТЯГУ РІДИНИ МЕТОДОМ ВІДРИВУ КРАПЛІ 285 KB
  Лабораторна робота № 2 ВИЗНАЧЕННЯ КОЕФІЦІЄНТА ПОВЕРХНЕВОГО НАТЯГУ РІДИНИ МЕТОДОМ ВІДРИВУ КРАПЛІ. Мета роботи: а вивчення властивостей рідкого стану речовини; б експериментальне визначення коефіцієнта поверхневого натягу рідини та дослідження його залежності від
13318. ВИЗНАЧЕННЯ ТЕМПЕРАТУРНОГО КОЕФІЦЇЄНТА ОБЄМНОГО РОЗШИРЕННЯ РІДИН 341.5 KB
  Лабораторна робота №З ВИЗНАЧЕННЯ ТЕМПЕРАТУРНОГО КОЕФІЦЇЄНТА ОБЄМНОГО РОЗШИРЕННЯ РІДИН Мета роботи: а визначення теплового розширення речовин; 2 дослідне визначення коефіцієнта обємного розширення. Прилади і матеріали: прилад Дюлонга і Пті; нагрівам; лаборат
13319. ВИЗНАЧЕНИМ КОЕФІЦІЄНТА ТЕПЛОПРОВІДНОСТІ МЕТАЛІВ КАЛОРИМЕТРИЧНИМ МЕТОДОМ 242 KB
  Лабораторна робота №4 ВИЗНАЧЕНИМ КОЕФІЦІЄНТА ТЕПЛОПРОВІДНОСТІ МЕТАЛІВ КАЛОРИМЕТРИЧНИМ МЕТОДОМ Мета роботи: а вивчення явища тепло переносу; б експериментальне визначення коефіцієнта теплопровідності. Прилади та матеріали: калориметрична установка ваги з ...