- •Одесский национальный морской университет
- •1Идентификация обыкновенного дифференциального уравнения первого порядка
- •1.1 Исходные данные для идентификации
- •1.2 Методика идентификации
- •2. Моделирование работы динамической системы
- •2.1 Постановка задачи.
- •2.2 Приведение математической модели объекта к системе обыкновенных дифференциальных уравнений 1го порядка.
- •Решение системы уравнений (2.10) – (2.12) в среде Excel.
- •2.5 Решение системы уравнений (2.10) – (2.12) в среде Delphi.
- •Использованные литературные источники
- •Приложение
Использованные литературные источники
Алабужев П.М.. Геронимус В.Б.. МинкевичЛ.М.. Шеховцов Б.А. Теория подобия и размерностей. Моделирование.-М.: Высшая школа. 1968.- 208 с.
Бронштейн И.Н.. Семендяев К.А. Справочник по математике для инженеров и учащихся втузовю -13-е изд.. исправленное.-М.: Наука. Гл.Ред. физ.-мат. лит.. 1986. -544 с.
Волков Е.А. Численнне методо: Учебное пособие. - М.: Наука. Главная редакция физико-математической литературьі. 1982. - 256 с.
Вычислительная техника и программирование. Часть 3 «Основы алгоритмизации. программирования и решения инженерньгх и зкономических задач на ЭВМ». Учебное пособие / Под общей редакцией проф. Меркта Р.В. - Одесса: ОГМУ.2001. -86 с.
Годунов С.К.. Рябенький В.С. Разностные схемы (введение в теорию). Учебное пособие. - М: Наука. 1973.- 400 с.
Кенту М. DELPHI 6 :для профессионалов. -СПб.:Питер. 2002. -1088 с.
Лебедев А.Н. Моделирование в научно-технических исследованиях. -М.: Радио и связь. 1989. -224 с.
Львовский Е.Н. Статистические метода построения змпирических формул: Учеб. пособие для втузов. - 2-е изд. .перераб. и доп. -М.:Вьісш. шк.. 1988. -239 с.
Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик. Фортран и Паскаль. - Томск: МП "Раско". 1991.-272 с.
Турчак Л.И. Основи численних методов: Учеб. Пособие. - М.: Наука. Гл.ред.физ.-мат. лит.. 1987. - 320 с.
Фаранов П.С. Программирование баз данньгх в DELPHI 6. Учебный курс. -СПб.:Питер. 2002. -374 с.
Методические указания разработанные кафедрой “Техническая кибернетика” и электронные документы – методуказания к лабораторным работам по курсам “Численные методы” и “Моделирование систем”.
Приложение
unit MS;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids,Math,ComObj;
type
TMainForm = class(TForm)
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label3: TLabel;
Label4: TLabel;
Edit6: TEdit;
Label5: TLabel;
Edit7: TEdit;
Edit9: TEdit;
Label8: TLabel;
Edit11: TEdit;
Edit12: TEdit;
Label10: TLabel;
Label12: TLabel;
SaveDialog1: TSaveDialog;
StringGrid1: TStringGrid;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit10: TEdit;
Edit5: TEdit;
GroupBox2: TGroupBox;
Edit13: TEdit;
Label2: TLabel;
Label6: TLabel;
Label7: TLabel;
Label13: TLabel;
Edit14: TEdit;
Edit15: TEdit;
Label14: TLabel;
GroupBox3: TGroupBox;
Edit16: TEdit;
Edit17: TEdit;
Edit18: TEdit;
Label11: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
GroupBox4: TGroupBox;
Edit19: TEdit;
Edit20: TEdit;
Edit21: TEdit;
GroupBox5: TGroupBox;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Memo1: TMemo;
GroupBox6: TGroupBox;
procedure FormCreate(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
procedure Edit2Exit(Sender: TObject);
procedure Edit3Exit(Sender: TObject);
procedure Edit4Exit(Sender: TObject);
procedure Edit5Exit(Sender: TObject);
procedure Edit6Exit(Sender: TObject);
procedure Edit7Exit(Sender: TObject);
procedure Edit9Exit(Sender: TObject);
procedure Edit11Exit(Sender: TObject);
procedure Edit19Exit(Sender: TObject);
procedure EditKeyPress(Sender: TObject; var Key: Char);
procedure Edit10Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit13Exit(Sender: TObject);
procedure Edit14Exit(Sender: TObject);
procedure Edit15exit(Sender: TObject);
procedure Edit16Exit(Sender: TObject);
procedure Edit17Exit(Sender: TObject);
procedure Edit18Exit(Sender: TObject);
procedure Edit12Exit(Sender: TObject);
procedure Edit20Exit(Sender: TObject);
procedure Edit21Exit(Sender: TObject);
private
procedure Check(Ed: TEdit; var V: Double; Pres: Integer=3);
procedure SaveToFile(Fn:String);
public
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
var
n : Integer;
A,B,K1,K2,Y0,F0,C,K3,K4,Z0,A0,A1,A2,A3,A4,B0,B1,B2,dt,E: Double;
T,X,G,F,Y,Z : array of Double;
procedure TMainForm.Button1Click(Sender: TObject);
var
i,j : Integer;
D1,D2,D3,D4,D5,D6,D7,D8,D9 : Double;
YY,FF,ZZ : Double;
begin
E:=0.000001;
SetLength(T,n+1);
SetLength(X,n+1);
SetLength(G,n+1);
SetLength(F,n+1);
SetLength(Y,n+1);
SetLength(Z,n+1);
{ Calculattion of D1..D7 }
D1:=(A-b*dt)/A;
D2:=-dt/A;
D3:=(dt*K1)/A;
D4:=(dt*K2)/A;
D5:=(C-dt)/C;
D6:=((K3+K4)*dt)/C;
D7:=(-K4*dt)/C;
D8:=(-(K3+K4)*dt)/C;
D9:=(K4*dt)/C;
Memo1.Lines.add('D1='+FloatToStrF(D1,ffFixed,6,6)+' D2='+FloatToStrF(D2,ffFixed,6,6)+' D3='+FloatToStrF(D3,ffFixed,6,6)+' D4='+FloatToStrF(D4,ffFixed,6,6)+
' D5='+FloatToStrF(D5,ffFixed,6,6)+' D6='+FloatToStrF(D6,ffFixed,6,6)+' D7='+FloatToStrF(D7,ffFixed,6,6)+' D8='+FloatToStrF(D8,ffFixed,6,6)+' D9='+FloatToStrF(D9,ffFixed,6,6));
for I := 0 to N do begin
T[i]:=dt*i;
X[i]:=A0+(A1*T[i])+(A2*T[i]*T[i])+(A3*T[i]*T[i]*T[i])+(A4*T[i]*T[i]*T[i]*T[i]);
G[i]:=B0+(B1*T[i])+(B2*T[i]*T[i]);
end;
F[0]:=F0;
Y[0]:=Y0;
Z[0]:=Z0;
for I := 1 to N do begin
{ Prediction }
Y[i]:=Y[i-1];
F[i]:=F[i-1];
Z[i]:=Z[i-1];
Repeat
j:=0;
FF:=F[i-1]*D1+Y[i-1]*D2+X[i-1]*D3+Z[i-1]*D4;
YY:=Y[i-1]+dt*F[i-1];
ZZ:=D5*Z[i-1]+D6*Y[i]+D7*Y[i-1]+D8*G[i]+D9*G[i-1];
if abs(F[i]-FF)>E then j:=j+1;
if abs(Y[i]-YY)>E then j:=j+1;
if abs(Z[i]-ZZ)>E then j:=j+1;
F[i]:=FF;
Y[i]:=YY;
Z[i]:=ZZ;
Until j=0;
end;
{ Output results}
StringGrid1.RowCount := N + 2;
StringGrid1.Cells[0,0] := 'I';
StringGrid1.Cells[1,0] := 'T';
StringGrid1.Cells[2,0] := 'X';
StringGrid1.Cells[3,0] := 'G';
StringGrid1.Cells[4,0] := 'F';
StringGrid1.Cells[5,0] := 'Y';
StringGrid1.Cells[6,0] := 'Z';
for I := 0 to n do begin
StringGrid1.Cells[0,I+1] := IntToStr(I);
StringGrid1.Cells[1,I+1] := FloatToStrF(T[I],ffFixed,3,3);
StringGrid1.Cells[2,I+1] := FloatToStrF(X[I],ffFixed,8,8);
StringGrid1.Cells[3,I+1] := FloatToStrF(G[I],ffFixed,8,8);
StringGrid1.Cells[4,I+1] := FloatToStrF(F[I],ffFixed,8,8);
StringGrid1.Cells[5,I+1] := FloatToStrF(Y[I],ffFixed,8,8);
StringGrid1.Cells[6,I+1] := FloatToStrF(Z[I],ffFixed,8,8);
end;
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
// if SaveDialog1.Execute then SaveToFile(SaveDialog1.FileName);
SaveToFile('1');
end;
procedure TMainForm.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TMainForm.Check(Ed: TEdit; var V: Double; Pres: Integer=3);
begin
try
V := StrToFloat(Ed.Text);
Ed.Text := FloatToStrF(V,ffFixed,8,Pres);
except
on E: EConvertError do begin
ShowMessage('Неверное число');
Ed.SetFocus;
end;
end;
end;
procedure TMainForm.Edit10Change(Sender: TObject);
begin
n := StrToInt(Edit10.Text);
end;
procedure TMainForm.Edit11Exit(Sender: TObject);
begin
Check(Edit11,dt);
end;
procedure TMainForm.Edit12Exit(Sender: TObject);
begin
Check(Edit12,A1);
end;
procedure TMainForm.Edit19Exit(Sender: TObject);
begin
Check(Edit19,B0);
end;
procedure TMainForm.Edit13Exit(Sender: TObject);
begin
Check(Edit13,F0);
end;
procedure TMainForm.Edit14Exit(Sender: TObject);
begin
Check(Edit14,C);
end;
procedure TMainForm.Edit15exit(Sender: TObject);
begin
Check(Edit15,Z0);
end;
procedure TMainForm.Edit16Exit(Sender: TObject);
begin
Check(Edit16,A2);
end;
procedure TMainForm.Edit17Exit(Sender: TObject);
begin
Check(Edit17,A3);
end;
procedure TMainForm.Edit18Exit(Sender: TObject);
begin
Check(Edit18,A4);
end;
procedure TMainForm.Edit1Exit(Sender: TObject);
begin
Check(Edit1,A);
end;
procedure TMainForm.Edit20Exit(Sender: TObject);
begin
Check(Edit20,B1);
end;
procedure TMainForm.Edit21Exit(Sender: TObject);
begin
Check(Edit21,B2);
end;
procedure TMainForm.Edit2Exit(Sender: TObject);
begin
Check(Edit2,K4);
end;
procedure TMainForm.Edit3Exit(Sender: TObject);
begin
Check(Edit3,B);
end;
procedure TMainForm.Edit4Exit(Sender: TObject);
begin
Check(Edit4,K1);
end;
procedure TMainForm.Edit5Exit(Sender: TObject);
begin
Check(Edit5,K2);
end;
procedure TMainForm.Edit6Exit(Sender: TObject);
begin
Check(Edit6,K3);
end;
procedure TMainForm.Edit7Exit(Sender: TObject);
begin
Check(Edit7,A0);
end;
procedure TMainForm.Edit9Exit(Sender: TObject);
begin
Check(Edit9,Y0);
end;
procedure TMainForm.EditKeyPress(Sender: TObject; var Key: Char);
var
Kt : Char;
begin
Kt := Key;
Key := #0;
if Kt in ['0'..'9',#3,#8,'-'] then Key := Kt;
if Kt in ['.',','] then Key := DecimalSeparator;
if Kt = #13 then SelectNext(ActiveControl,True,True);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
Memo1.Clear;
SaveDialog1.InitialDir := Application.ExeName;
end;
procedure TMainForm.SaveToFile(Fn: String);
var Excel: Variant;
i:Integer;
begin
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Add;
Excel.Range['A1']:='i';
Excel.Range['B1']:='T';
Excel.Range['C1']:='X';
Excel.Range['D1']:='G';
Excel.Range['E1']:='F';
Excel.Range['F1']:='Y';
Excel.Range['G1']:='Z';
for i:=0 to n do begin
Excel.Range['A'+IntToStr(i+2)]:=i;
Excel.Range['B'+IntToStr(i+2)]:=T[i];
Excel.Range['C'+IntToStr(i+2)]:=X[i];
Excel.Range['D'+IntToStr(i+2)]:=G[i];
Excel.Range['E'+IntToStr(i+2)]:=F[i];
Excel.Range['F'+IntToStr(i+2)]:=Y[i];
Excel.Range['G'+IntToStr(i+2)]:=Z[i];
end;
Excel.Range('A1'+':G'+IntToStr(n+2)).Select;
Excel.Selection.HorizontalAlignment:=3;
Excel.ActiveWorkbook.Close;
Excel.Application.Quit;
end;
end.
