Решение дифференциальных уравнений усовершенствованным методом Эйлера

Автор работы: Пользователь скрыл имя, 07 Декабря 2013 в 15:43, курсовая работа

Краткое описание

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

Содержание

ВВЕДЕНИЕ 3
1 Теоретическая часть 5
1.1 Численное дифференцирование 5
1.2 Усовершенствованный метод Эйлера 7
2 Постановка и решение задачи 8
2.1 Решение задачи усовершенствованным методом Эйлера 8
3 Программная реализация 14
3.1 Блок схемы алгоритмов 14
3.2 Текст программы 15
3.3. Тестовый пример 18
ЗАКЛЮЧЕНИЕ 20
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 21

Вложенные файлы: 1 файл

Курсовая работа.docx

— 213.37 Кб (Скачать файл)

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ 3

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

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

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

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

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

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

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

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

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

ЗАКЛЮЧЕНИЕ 20

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 21

 

 

ВВЕДЕНИЕ

 

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

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

 

 

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

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

 

 

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

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

 

 

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

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

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

 

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

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

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

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

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

                                (1)

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

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

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

(2)

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

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

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

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

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

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

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

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

 

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

 

 

 

или

 

                                      (4)

 

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

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

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

.

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

 

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

                                         (5)

 

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

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

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

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

                                                                          (6)

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

                                                              (7)

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

                                                                                         (8)

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

                                                                                         (9)

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

….

 

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

 

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

с точностью

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

 

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

 

Находим

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

Находим

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

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

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

 

        Находим шаг

 

 

Находим

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

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

 

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

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

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

 

Начало



 


,, , 



 

 


 



 

 

 

 


 

 

 

 

 

 

 

 


 

 

 



нет да


 

 

 

 

 

 



 


 

Конец



 

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

 

unit Unit1;

 

interface

 

uses

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

  Dialogs, ExtCtrls, StdCtrls, Grids;

 

type

  TForm1 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Label3: TLabel;

    Edit4: TEdit;

    Label4: TLabel;

    Edit5: TEdit;

    Edit6: TEdit;

    Label5: TLabel;

    Label6: TLabel;

    Bevel1: TBevel;

    Label7: TLabel;

    Edit7: TEdit;

    Label8: TLabel;

    Button1: TButton;

    StringGrid1: TStringGrid;

    StringGrid2: TStringGrid;

    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);

//f:= 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.

 

 

 

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

Возьмем в качестве примера  уравнение н.у с точностью . Результат работы программы представлен на рисунке 2

 

 

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

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

 

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

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

Рисунок 3 – Ошибка при введении неправильных значений границ

Информация о работе Решение дифференциальных уравнений усовершенствованным методом Эйлера