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

Конец


 

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

39370. Проектирование и расчет цилиндрического редуктора 564 KB
  Расчет электродвигателя и кинематический расчет привода. Расчет зубчатой передачи редуктора. Предварительный расчет валов редуктора. Конструктивные размеры шестерни и колеса. Конструктивные размеры корпуса редуктора. Первый этап компоновки редуктора
39371. Основы генетики и селекций 29.85 KB
  Ген (от греч. genos — род, происхождение) – участок молекулы геномной нуклеиновой кислоты, характеризуемый специфической для него последовательностью нуклеотидов, представляющий единицу функции, отличной от функций других генов, и способный изменяться путем мутирования.
39372. Расчет привода рабочей машины 967.5 KB
  Мощность двигателя зависит от требуемой мощности рабочей машины а его частота вращения от частоты вращения приводного вала рабочей машины.2 Определение передаточного числа привода и его ступеней Передаточное число привода определяется отношением номинальной частоты вращения двигателя к частоте вращения приводного вала рабочей машины при номинальной нагрузке и равно произведению передаточных чисел закрытой и открытой передач.1 Частота вращения приводного вала рабочей машины 2.1 Определяем мощности а двигателя б быстроходного вала...
39373. М.Вебер – основоположник «понимающей» социологии и теории социального действия 15.96 KB
  М. Вебер ставит в качестве необходимой предпосылки социологии не общество, а отдельного осмысленно действующего индивида. Согласно Веберу общественные институты (государство, право, религия и т. д.) должны изучаться социологией в той форме, в какой они становятся значимыми для отдельных индивидов.
39374. Введение в изучение культуры Италии 179 KB
  Во все эпохи Италия, Апеннинский полуостров и ближайшие острова, их природные и антропологические богатства привлекали исследователей. Начиная с мифологической эпохи, история, культура, цивилизация этой части света, находит свое отражение в устном и письменном творчестве
39375. Збільшення прибутку на підприємстві на прикладі ВАТ «Биттехніка» 910 KB
  Мета в дипломної роботи складається у вивченні економічного аналізу прибутку, витрат та обсяг виробництва на підприємстві. Визначити взаємозв’язок впливу на прибуток таких факторів як обсяг та витрати виробництва методом CVP аналізу й побудови графіку беззбитковості.
39376. Проектирование двухступенчатого механического привода 1.61 MB
  механизм лебедки по рекомендациям [Чернилевский с. Определим угловую скорость 3го вала: Определим мощность 3го вала: Для двухступенчатого привода подберем двигатель и произведем кинематический и силовой расчет если мощность и угловая скорость выходного вала известны и соответственно равны: Мощность требуемая от электродвигателя: где общий КПД привода: По ГОСТ 1952381 выбираем ближайший по мощности электродвигатель 4А200М6У3 [Чернилевский с. 227] выполняя условие для которого При данной частоте вращения общее передаточное...
39377. ОБЩАЯ ХАРАКТЕРИСТИКА РЫНОЧНОГО ХОЗЯЙСТВА 489 KB
  Общественное разделение труда предполагает специализацию, обособление отдельных видов конкретного труда (труда в особой целесообразной форме - например, труд пекаря, гончара). Развитие общественного разделения труда выражается в увеличении числа профессий и специальностей
39378. Процесуальний порядок оскарження постанови про порушення кримінальної справи 539.75 KB
  Кожна кримінальна справа може бути порушена лише за на- явності приводу і достатньої підстави за відсутності обставиш що виключають провадження у справі.