50063

Численное решение обыкновенных дифференциальных уравнений

Лабораторная работа

Математика и математический анализ

При выполнении данной лабораторной работы были получены теоретические и практические навыки в приближенном решении дифференциальных уравнений первого порядка с начальным условием методами Эйлера, Эйлера (уточнённый), Рунге-Кутты, Адамса, Милна. Сравнивая полученные результаты вычислений с истинным значением можно сделать вывод...

Русский

2014-01-15

957.5 KB

8 чел.

СОДЕРЖАНИЕ

[1] СОДЕРЖАНИЕ

[2]
Постановка задачи

[3]
Численное решение

[3.1] Метод Эйлера

[3.2] Уточненный метод Эйлера

[3.3] Метод Рунге-Кутты

[3.4]
Метод Адамса

[3.5] Метод Милна

[4] Програмная реализация

[4.1] Описание основных процедур и функций

[4.2]
Блок-схемы основных процедур

[4.3] Текст программы

[5]
Решение в среде Mathcad

[6]

Результаты вычислений

[7]
Вывод

[8] Кафедра: «Техническая кибернетика»

[8.0.1]  

  1.  
    Постановка задачи

Необходимо решить дифференциальное уравнение   с начальным условием y(0) = 1 методом:

  •  Эйлера,
  •  уточнённым  Эйлера,
  •  Рунге-Кутты (4-го порядка),
  •  Адамса,
  •  Милна,

на интервале [0;0,5].

Точное решение данного дифференциального уравнения представляется в следующем виде:

  1.  
    Численное решение
    1.  Метод Эйлера 

Вычисления производятся по формулам: ,  где h-шаг, f(x,y)-заданная функция; h = 0,05.

Вычисления представим в виде таблицы:

i

xi

0

0,0000

1,0000

0,0000

0,0000

1

0,0500

1,0000

-0,0526

-0,0026

2

0,1000

0,9974

-0,1144

-0,0057

3

0,1500

0,9916

-0,1881

-0,0094

4

0,2000

0,9822

-0,2784

-0,0139

5

0,2500

0,9683

-0,3921

-0,0196

6

0,3000

0,9487

-0,5415

-0,0271

7

0,3500

0,9216

-0,7493

-0,0375

8

0,4000

0,8842

-1,0654

-0,0533

9

0,4500

0,8309

-1,6253

-0,0813

10

0,5000

0,7496

-3,0058

-0,1503

Значение, вычисленное данным методом: y(0,5) = 0,7496, а точно вычисленное  y(0,5) = 0,5000.

  1.  Уточненный метод Эйлера

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

 где

h = 0,05; x1/2 = 0,025;  y1/2 = 1;

Вычисления представим в виде таблицы:

i

xi

0

0,0000

1,0000

1

0,0500

0,9987

-0,0256

-0,0013

2

0,1000

0,9974

-0,1143

-0,0057

3

0,1500

0,9873

-0,1943

-0,0097

4

0,2000

0,9780

-0,2853

-0,0143

5

0,2500

0,9588

-0,4109

-0,0205

6

0,3000

0,9369

-0,5701

-0,0285

7

0,3500

0,9017

-0,8124

-0,0406

8

0,4000

0,8557

-1,1946

-0,0597

9

0,4500

0,7823

-2,0094

-0,1005

10

0,5000

0,6547

Значение, вычисленное данным методом: y(0,5) = 0,6547, а точно вычисленное   y(0,5) = 0,5000.

  1.  Метод Рунге-Кутты

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

 ,где

 

h = 0,05.

Вычисления представим в виде таблицы:

xi

φ0

φ1 

φ2 

φ3

0

0,0000

1,0000

0,0000

-0,0013

-0,0013

-0,0027

-0,0013

1

0,0500

0,9987

-0,0027

-0,0042

-0,0043

-0,0059

-0,0043

2

0,1000

0,9944

-0,0059

-0,0077

-0,0078

-0,0098

-0,0078

3

0,1500

0,9867

-0,0098

-0,0120

-0,0121

-0,0145

-0,0121

4

0,2000

0,9746

-0,0145

-0,0174

-0,0175

-0,0207

-0,0175

5

0,2500

0,9571

-0,0207

-0,0244

-0,0246

-0,0291

-0,0247

6

0,3000

0,9325

-0,0291

-0,0343

-0,0347

-0,0413

-0,0347

7

0,3500

0,8977

-0,0413

-0,0496

-0,0504

-0,0618

-0,0505

8

0,4000

0,8472

-0,0618

-0,0778

-0,0804

-0,1078

-0,0810

9

0,4500

0,7662

-0,1081

-0,1609

-0,1872

-0,5832

-0,2312

10

0,5000

0,5350

-1,3804

0,1235

-0,6473

0,1255

-0,3837

Значение, вычисленное данным методом: y(0,5) = 0,535, а точно вычисленное y(0,5) = 0,5000.

  1.  
    Метод Адамса

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

,    

где    

Вычисления представим в виде таблицы:

xi 

2

3

4

5

0

0,0000

1,0000

0,0000

-0,0027

1

0,0500

0,9987

-0,0027

-0,0005

-0,0032

-0,0002

2

0,1000

0,9944

-0,0059

-0,0007

-0,0001

-0,0039

-0,0003

-0,000034

3

0,1500

0,9867

-0,0098

-0,0009

-0,0002

-0,0048

-0,0004

-0,000216

4

0,2000

0,9746

-0,0145

-0,0014

-0,0004

-0,0062

-0,0008

-0,000518

5

0,2500

0,9571

-0,0207

-0,0022

-0,0009

-0,0083

-0,0017

-0,001735

6

0,3000

0,9325

-0,0291

-0,0039

-0,0026

-0,0122

-0,0043

-0,009350

7

0,3500

0,8979

-0,0413

-0,0082

-0,0120

-0,0204

-0,0163

-0,173723

8

0,4000

0,8478

-0,0617

-0,0245

-0,1857

-0,0449

-0,2020

9

0,4500

0,7694

-0,1065

-0,2265

-0,2713

10

0,5000

0,6169

-0,3779

Значение, вычисленное данным методом: y(0,5) = 0,6169, а точно вычисленное y(0,5) = 0,5000.

  1.  Метод Милна

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

Формула прогноза:

Формула коррекции:    

Определение начального отрезка y1, y2, y3 произведем по формуле Рунге-Кутта 4-го порядка точности.

y1=y(0,5)=0,9987,      y2=y(0,1)= 0,9944,      y3=y(0,15)= 0,9867;

  Вспомогательная таблица:

xi

yпр

y'пр

yкор

y'кор

0,0000

1,0000

0,0000

1,0000

0,0000

0,0500

0,9987

-0,0541

0,9987

-0,0541

0,1000

0,9944

-0,1181

0,9944

-0,1180

0,1500

0,9867

-0,1952

0,9867

-0,1952

0,2000

0,9746

-0,2909

0,9746

-0,2910

0,2500

0,9572

-0,4141

0,9571

-0,4142

0,3000

0,9326

-0,5809

0,9324

-0,5812

0,3500

0,8981

-0,8246

0,8977

-0,8258

0,4000

0,8482

-1,2311

0,8472

-1,2362

0,4500

0,7706

-2,1196

0,7662

-2,1624

0,5000

0,6221

-7,1915

0,5626

-14,9816

Значение, вычисленное данным методом: y(0,5) = 0,5626, а точно вычисленное y(0,5) = 0,5000.


  1.  Програмная реализация
    1.  Описание основных процедур и функций

      - Procedure Eiler(h, Xo, Xmax, Yo :real; var StringGrid_data: TStringGrid);

         Вычисляются значения точек функции, являющейся решением ОДУ, по методу Эйлера. На выходе получаются массивы чисел типа real, записанные в StringGrid_data.

     - Procedure RK4(h, Xo, Xmax, Yo :real; var StringGrid_data: TStringGrid); Вычисляются значения точек функции, являющейся решением ОДУ, по методу Рунге-Кутты 4 порядка. На выходе получаются массивы чисел типа real, записанные в StringGrid_data.

  1.  
    Блок-схемы основных процедур

Метод Эйлера      Метод Рунге-Кутты 4 порядка


Приложение 1

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

unit Main_unit;

interface

uses

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

 Dialogs, StdCtrls, ExtCtrls, Grids, pngimage;

type

 TForm_lab6 = class(TForm)

   Image_DE: TImage;

   But_calc: TButton;

   StringGrid_data: TStringGrid;

   Edit_Xo: TEdit;

   Edit_Xmax: TEdit;

   Label_Xo: TLabel;

   Label_Xmax: TLabel;

   method_choice: TComboBox;

   Label_DE: TLabel;

   Label_method: TLabel;

   Label_Yo: TLabel;

   Edit_Yo: TEdit;

   procedure But_calcClick(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form_lab6: TForm_lab6;

implementation

{$R *.dfm}

procedure Eiler(h, Xo, Xmax, Yo :real; var StringGrid_data: TStringGrid);

var

 yi_1,y1,y2,x,y,dydx,dy : real;

 i:integer;

begin

 StringGrid_data.Visible:=true;

 StringGrid_data.Cells[0,0]:='     n  ';

 StringGrid_data.Cells[1,0]:='     x  ';

 StringGrid_data.Cells[2,0]:='     y  ';

 StringGrid_data.Cells[3,0]:='     dy/dx  ';

 StringGrid_data.Cells[4,0]:='     dy ';

 for i:= 0 to 10 do

   begin

     StringGrid_data.Cells[0,i+1]:=inttostr(i);

     StringGrid_data.Cells[1,i+1]:=FloatToStr(Xo+h*i);

   end;

 StringGrid_data.Cells[2,1]:='1';

 for i:= 2 to 11 do

   begin

     yi_1:=strtofloat(StringGrid_data.Cells[2,i-1]);

     x:= strtofloat(StringGrid_data.Cells[1,i-1]);

     y:= strtofloat(StringGrid_data.Cells[2,i-1]);

     StringGrid_data.Cells[2,i]:=floattostr(Yo+h*(1/(x-y)+1));

     y1:=strtofloat(StringGrid_data.Cells[2,i-1]);

     y2:=strtofloat(StringGrid_data.Cells[2,i]);

     dy:=y2-y1;

     StringGrid_data.Cells[4,i-1]:=floattostr(dy);

   end;

 for i:= 1 to 11 do

   begin

     y:=strtofloat(StringGrid_data.Cells[2,i]);

     x:= strtofloat(StringGrid_data.Cells[1,i]);

     StringGrid_data.Cells[3,i]:=floattostr(1/(x-y)+1);

   end;

end;

procedure RK4(h, Xo, Xmax, Yo :real; var StringGrid_data: TStringGrid);

var

 f0,f1,f2,f3, Xi,Yi : real;

 Xmas,Ymas: array [1..10] of real;

 yi_1,y1,y2,x,y,dy : real;

 i:integer;

begin

 StringGrid_data.Visible:=true;

 StringGrid_data.Cells[0,0]:='     n  ';

 StringGrid_data.Cells[1,0]:='     x  ';

 StringGrid_data.Cells[2,0]:='     y  ';

 StringGrid_data.Cells[3,0]:='     f0  ';

 StringGrid_data.Cells[4,0]:='     f1  ';

 StringGrid_data.Cells[5,0]:='     f2  ';

 StringGrid_data.Cells[6,0]:='     f3  ';

 StringGrid_data.Cells[7,0]:='     dy ';

 for i:= 0 to 10 do

   begin

     StringGrid_data.Cells[0,i+1]:=inttostr(i);

     StringGrid_data.Cells[1,i+1]:=FloatToStr(Xo+h*i);

   end;

 StringGrid_data.Cells[2,1]:=FloatToStr(Yo);

 for i := 0 to 10 do

 begin

   Xi:= StrToFloat(StringGrid_data.Cells[1,i+1]);

   Yi:= StrToFloat(StringGrid_data.Cells[2,i+1]);

   f0:= h*(1/(Xi-Yi)+1);

   f1:=h*(1/((Xi+0.5*h)-(Yi+0.5*f0))+1);

   f2:=h*(1/((Xi+0.5*h)-(Yi+0.5*f1))+1);

   f3:=h*(1/((Xi+h)-(Yi+f2))+1);

   dy:=1/6*(f0+2*f1+2*f2+f3);

   StringGrid_data.Cells[2,i+2]:=floattostr(Yi+dy);

   StringGrid_data.Cells[3,i+1]:=floattostr(f0);

   StringGrid_data.Cells[4,i+1]:=floattostr(f1);

   StringGrid_data.Cells[5,i+1]:=floattostr(f2);

   StringGrid_data.Cells[6,i+1]:=floattostr(f3);

   StringGrid_data.Cells[7,i+1]:=floattostr(dy);

 end;

end;

procedure TForm_lab6.But_calcClick(Sender: TObject);

var

 Xo, Xmax, Yo: real;

 yi_1,y1,y2,x,y,dydx,dy : real;

 i:integer;

 h : real;

begin

 Xo:=Strtofloat(Edit_Xo.Text);

 Xmax:=Strtofloat(Edit_Xmax.Text);

 h:=(Xmax-Xo)/10;

 Yo:=Strtofloat(Edit_Yo.Text);

 if method_choice.Text='Эйлера' then

   Eiler(h,Xo,Xmax,Yo,StringGrid_data)

   else

   if method_choice.Text='Рунге-Кутты' then

     RK4(h,Xo,Xmax,Yo,StringGrid_data) end; end.

  1.  
    Решение в среде Mathcad
  2.  

    Результаты вычислений

Метод

(Yi)

Xi

Метод Эйлера

Уточненный метод Эйлера

Метод Рунге-Кутта 4го порядка

Метод Адамса

Метод Милна

Точное решение

0,0000

1,0000

1,0000

1,0000

1,0000

1,0000

1,0000

0,0500

1,0000

0,9987

0,9987

0,9987

0,9987

0,9987

0,1000

0,9974

0,9974

0,9944

0,9944

0,9944

0,9944

0,1500

0,9916

0,9873

0,9867

0,9867

0,9867

0,9867

0,2000

0,9822

0,9780

0,9746

0,9746

0,9746

0,9746

0,2500

0,9683

0,9588

0,9571

0,9571

0,9571

0,9571

0,3000

0,9487

0,9369

0,9325

0,9325

0,9324

0,9325

0,3500

0,9216

0,9017

0,8977

0,8979

0,8977

0,8977

0,4000

0,8842

0,8557

0,8472

0,8478

0,8472

0,8472

0,4500

0,8309

0,7823

0,7662

0,7694

0,7662

0,7662

0,5000

0,7496

0,6547

0,5350

0,6169

0,5626

0,5000


Вывод

При выполнении данной лабораторной работы были получены теоретические и практические навыки в приближенном решении дифференциальных уравнений первого порядка с начальным условием методами Эйлера, Эйлера (уточнённый), Рунге-Кутты, Адамса, Милна. Сравнивая полученные результаты вычислений с истинным значением можно сделать вывод, что наибольшей точностью из всех рассмотренных методов для данного дифференциального уравнения обладает метод Рунге-Кутты 4-го порядка.

 


Министерство образования и науки РФ

Федеральное Государственное Бюджетное образовательное

учреждение высшего  
пр
офессионального образования

«Белгородский Государственный Технологический Университет им. В.Г. Шухова»
(БГТУ им. В.Г. Шухова)

ИИТУС

Кафедра: «Техническая кибернетика»

Лабораторная работа №6

дисциплина: «Численные методы и оптимизация»

тема:  «Численное решение обыкновенных дифференциальных

уравнений»

Вариант 1

Выполнил:
студент группы АП-21

Андрианов А.Ю.

Принял:

ст. препод. кафедры ТК
Рыбин И.А.

Белгород 2013

  1.  

Да

Нет

ачало

x0 ,y0, h, n

x[0]=Xo

y[0]=Yo

i=1

i>=n

y[i]=y[i]+h*f(x,y)

x[i]=x[i]+h

i=i+1

Конец


 

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

6169. Бази даних XML 130 KB
  Бази даних XML Завдання Вивчити відповідні розділи документації СУБД. Навести власні приклади використання конструкцій мови доступу до СУБД. Підготувати звіт у вигляді файлу з прикладами та його друкованого варіанту. Створення ...
6170. НАГНЕТАТЕЛЬНАЯ ФУНКЦИЯ СЕРДЦА. ФАЗОВЫЙ АНАЛИЗ СЕРДЕЧНОГО ЦИКЛА. ЯВЛЕНИЯ, СОПРОВОЖДАЮЩИЕ РАБОТУ СЕРДЦА 164.23 KB
  Нагнетательная функция сердца. Роль клапанного аппарата в ее реализации. Закон Франка-Старлинга (закон «сердца»). Причины наполнения сердца кровью. Фазовый анализ сердечного цикла. Звуковые и механические явления, сопровождающие работу сердца (тоны сердца, верхушечный толчок), их диагностическое значение.
6171. Налаштування магістральних портів для зєднання комутаторів 99.5 KB
  Виконати спостереження за конфігурацією VLAN комутатора і його роботою. Виконати налаштування статичних VLAN на комутаторі. Перевірити конфігурацію VLAN і її роботу. Виконати налаштування магістралі між комутаторами
6172. Автосервис и фирменное обслуживание 8.35 MB
  Приведены материалы, необходимые при выполнении дипломных проектов по кафедре технологии обслуживания транспортных средств. Тематическая направленность проектов соответствует профессиональной деятельности выпускников на предприятиях автосервиса и фи...
6173. Создание, изменение и удаление таблиц в SQL Oracle 208 KB
  Создание, изменение и удаление таблиц в SQL Oracle Цели лабораторной работы Изучить возможности SQL Oracle по созданию, изменению и удалению таблиц. Приобрести практический опыт по созданию, изменению и удалению таблиц в SQL*Plus. ...
6174. Creation altering and deletion a table in SQL Oracle 206.5 KB
  Creation altering and deletion a table in SQL Oracle Purpose of the lab To study SQL Oracle possibilities in table creation, altering and deletion. To acquire practical skills in table creation, altering and deletion by using SQL*P...
6175. Integrity constraints in SQL Oracle 182 KB
  Integrity constraints in SQL Oracle Purpose of the lab To study SQL Oracle integrity constraints possibilities. To acquire practical skills in describing integrity constraints. Theoretical backgrounds You can define integrity...
6176. Системи захисту програмного забезпечення 72.5 KB
  Системи захисту програмного забезпечення 1. Класифікація систем захисту програмного забезпечення Системи захисту програмного забезпечення (СЗПЗ) широко поширені і знаходяться в постійному розвитку, завдяки розширенню ринку програмного забезпечення і...