Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «Тракторы»
Группа 101151
Лабораторная работа №5
ПО ДИСЦИПЛИНЕ
«ИНФОРМАТИКА»
РЕШЕНИЕ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ 1-ГО И ВЫШЕ ПОРЯДКОВ. МЕТОД РУНГЕ-КУТТА 4-ГО ПОРЯДКА.
Выполнил
студент Е.А.Горбёнок
«__»________ ___
Проверил Ю. Е. Атаманов
«__»________ ___
Минск 2012
unit Global;
interface
Type Mas=array[1..10] of real;
var V,Z:Mas; Fw:TextFile;
tn,tp,p,Xmin,Xmax,Ci:real;
procedure Fun(y:real;Var V:Mas);
procedure RK4(n:integer;y,y1,w:real;Var Z,V:Mas);
//procedure Tab1;
//Procedure Lin(NP,NZ,n,Disk:integer;Simvol:char);
implementation
Procedure RK4(n:integer;y,y1,w:real;Var Z,V:Mas);
Var k : integer; ZD:array [1..10] of real; KF:array [1..10,1..4] of real;
Dk:array [1..10] of real; //локальн.описание массивов
begin //n-число уравнений; у,у1-нач.и конечн .знач. //независ.перем. W-шаг интегрир. Z,V-массивы для //переменных и 1-х производных
repeat
for k:=1 to n do ZD[k]:=Z[k];
FUN(y,V);
for k:=1 to n do KF[k,1]:=w*V[k]; //коэф. k1
y:=y+w/2;
FUN(y,V);
for k:=1 to n do KF[k,2]:=w*(V[k]+KF[k,1]/2); //коэф. k2
FUN(y,V);
for k:=1 to n do KF[k,3]:=w*(V[k]+KF[k,2]/2); //коэф. k3
y:=y+w/2; //Отступаем на полный шаг
FUN(y,V);
for k:=1 to n do KF[k,4]:=w*(V[k]+KF[k,3]); //коэф. k4
for k:=1 to n do Dk[k]:=(KF[k,1]+2*KF[k,2]+2*KF[k,3]+KF[k,4])/6;
//расчет поправок
for k:=1 to n do
Z[k]:=ZD[k]+Dk[k]; //расчет значений переменных
until (y >= y1);
end; //RK4
Procedure FUN(y:real;Var V:Mas);
begin
V[1]:=Z[1]-y;
end; //Fun
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TeEngine, Series, ExtCtrls, TeeProcs, Chart, StdCtrls, Global;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Chart1: TChart;
Series1: TLineSeries;
Series2: TLineSeries;
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DecimalSeparator:='.';
Xmin:=0;
Xmax:=1;
Z[1]:=1.5;
LabeledEdit1.Text:=FloatToStr(Xmin);
LabeledEdit2.Text:=FloatToStr(Xmax);
LabeledEdit3.Text:=FloatToStr(Z[1]);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
tn:=0;
ci:=0.001;
p:=0.1;
AssignFile(Fw,'A.rez');
Rewrite(Fw);
repeat
RK4(1,tn,tp,ci,Z,V);
writeln(Fw,'',10,tp:10:3,z[1]:10:3,v[1]:10:3);
Series1.addXY(Tp,z[1]);
Series2.AddXY(Tp,v[1]);
tn:=Tp;
tp:=Tp+p;
until (tp>Xmax);
end;
end.