Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet.doc
Скачиваний:
14
Добавлен:
11.02.2016
Размер:
238.08 Кб
Скачать
    1. 2.5 Реализация численных решений в среде Delphi

ВЫВОД: сравнивая относительные погрешности двух методов (аналитико-сеточного с постоянным воздействием и явного) можно сделать соответствующие выводы:

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

  1. Приложение а

program ODU1;

{$APPTYPE CONSOLE}

uses

SysUtils,

MyType,

Math,

classes, Graphics,

Graphik in 'Graphik.pas' {GraphikFm};

var

Im,I,Key: Ir;

A,K,Y0,DT,a0,a1,a2,a3,Start: Db; // a0, a1, a2, a3 - коофициенты воздействия

D1,D2,D4,D5,C1,C2,C3,C4,Yamax,Yamin: Db;

T,X,Ya,Yac,Yya, DYac, DYya, ddYac, ddYya: Vec;

F1,F2:TextFile;

begin

AssignFile(F1,'Input1.txt');

Reset(F1);

Readln(F1,A,K,Y0,Im,DT,a0,a1,a2,a3,Start);

CloseFile(F1);

Writeln('A=', A:7:4, ' K=', K:7:4, ' Y0=', Y0:7:4);

Writeln(' Im=', Im:3, ' DT=', DT:5:2);

Writeln(' a0=', a0:7:4, ' a1=', a1:7:4, ' a2=', a2:7:4, ' a3=', a3:7:4 );

Readln;

D1:=exp(-DT/A); // коэфициенты аналитико-сеточного метода

D2:=(1-exp(-DT/A))*k/2;

D4:=1-DT/A; // коэфециенты явного метода

D5:=k*DT/A;

C1:=K*a0; // коэфициенты аналитического решения

C2:=K*a1*(cos(a3)+A*a2*sin(a3))/(power((A*a2),2)+1);

C3:=K*a1*(sin(a3)-A*a2*cos(a3))/(power((A*a2),2)+1);

T[1]:=Start;

X[1]:=a0+a1*sin(a2*T[1])*cos(a3)+a1*cos(a2*T[1])*sin(a3);

Ya[1]:=(Y0-C1-C3)*exp(-T[1]/A)+C1+C2*sin(a2*T[1])+C3*cos(a2*T[1]);

Yac[1]:=Y0; // Аналитико-сеточный метод с линейным воздействием

Yya[1]:=Y0; // явный метод

Yamin:=Ya[1];

Yamax:=Ya[1];

for I := 2 to Im do

begin

T[i]:=Start+Dt*(I-1);

X[i]:=a0+a1*sin(a2*T[i])*cos(a3)+a1*cos(a2*T[i])*sin(a3);

Ya[i]:=(Y0-C1-C3)*exp(-T[i]/A)+C1+C2*sin(a2*T[i])+C3*cos(a2*T[i]);

Yac[i]:=D1*Yac[i-1]+D2*(x[i]+x[i-1]);

Yya[i]:=D4*Yya[i-1]+D5*x[i];

end;

for I := 1 to Im do

begin

if Ya[i]>Yamax then Yamax:=Ya[i] else

if Ya[i]<Yamin then Yamin:=Ya[i];

end;

for I := 1 to Im do

begin

DYac[i]:=Yac[i]-Ya[i]; // погрешность

DYya[i]:=Yya[i]-Ya[i];

ddYac[i]:=DYac[i]/(Yamax-Yamin)*100; // относиельная погрешность

ddYya[i]:=DYya[i]/(Yamax-Yamin)*100;

end;

Writeln('T',#9,'X',#9,'Ya',#9,'Ytp',#9,'Yya'#9,'DYtp',#9,'DYya',#9,'ddYtp',#9,'ddYya');

for I := 1 to Im do

Writeln(T[i]:3:2,X[i]:8:4,Ya[i]:8:4,Yac[i]:8:4,Yya[i]:8:4,DYac[i]:8:4,DYya[i]:8:4,ddYac[i]:8:4, ddYya[i]:8:4);

GrProp.Line1Color := clRed;

GrProp.Line2Color := clBlack;

GrProp.Line3Color := clBlue;

GrProp.Line4Color := clGreen;

GrProp.Point1Color := clRed;

GrProp.Point2Color := clBlack;

GrProp.Point3Color := clBlue;

GrProp.Point4Color := clGreen;

GrProp.GridDigitsY := 3;

GrProp.GridDigitsX := 3;

GrProp.Line1Caption := 'X(t)';

GrProp.Line2Caption := 'Ya(t)';

GrProp.Line3Caption := 'Yya(t)';

GrProp.Line4Caption := 'Yac(t)';

ShowGraphik (T, X, T, Ya, T, Yac, T, Yya, Im,Im,Im,Im);

GrProp.Line1Caption := 'dYac(t)';

GrProp.Line2Caption := 'dYya(t)';

GrProp.Line3Caption := '';

GrProp.Line4Caption := '';

ShowGraphik (T, ddYac, T, ddYya, T, Yac, T, Yya, Im,Im,0,0);

AssignFile(F2,'Output1.txt');

ReWrite(F2);

Writeln(F2,'A=', A:7:4, ' K=', K:7:4, ' Y0=', Y0:7:4);

Writeln(F2,' Im=', Im:3, ' DT=', DT:5:2);

Writeln(F2,' a0=', a0:7:4, ' a1=', a1:7:4, ' a2=', a2:7:4, ' a3=', a3:7:4);

Writeln(F2, 'T',#9,'X',#9,'Ya',#9,'Yac'#9,'Yya',#9,'DYac',#9,'DYya',#9,'dYac',#9,'dYya');

for I := 1 to Im do

Writeln(F2, T[i]:3:2,X[i]:8:4,Ya[i]:8:4, Yac[i]:8:4, Yya[i]:8:4, DYac[i]:8:4, DYya[i]:8:4, ddYac[i]:8:4, ddYya[i]:8:4 );

CloseFile(F2);

readln;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]