Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы по курсу Delphi.doc
Скачиваний:
11
Добавлен:
15.11.2019
Размер:
1.81 Mб
Скачать

Пример составление программы

Пример 7.1. На рисунке приведена схема. Составить и рассчитать систему дифференциальных уравнений. Построить графики переходных процессов.

Составление системы уравнений для схемы

Cоставим систему дифференциальных уравнений.

Преобразовав уравнения, получим систему уравнений:

Составим таблицу производных

Правая часть системы уравнений

1.

2.

Для выполнения задания нам понадобится так же компоненты Image, Chart, компоненты типа Button для организации кнопок расчета и выхода, которые рассматривались в предыдущих работах.

Вынесем требуемые компоненты на форму и расположим их так, как показано на рис. 7.1.

Рис. 7.1а. Пример расположения компонента PageControl на форме

Рис. 7.1б. Пример расположения компонента Memo на форме

Рис. 7.2. Общий вид формы

Запуск программы осуществляется по нажатию клавиши F9. Результаты работы программы представлены на рис. 7.3. и рис. 7.4.

Рис. 7.3. Результаты работы программы (панель 1)

Рис. 7.4. Результаты работы программы (панель 2)

Полный текст программы:

unit Unit1;

interface

uses

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

Dialogs, jpeg, ExtCtrls, StdCtrls, ComCtrls, TeEngine, Series, TeeProcs,

Chart;

type

IntType = Integer;

RealType = Real;

Vector = Array[1..2] of RealType;

Matrix = Array[1..2,1..2] of RealType;

TForm1 = class(TForm)

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

Button1: TButton;

Button2: TButton;

Image1: TImage;

Memo1: TMemo;

ProgressBar1: TProgressBar;

ProgressBar2: TProgressBar;

Label1: TLabel;

Label2: TLabel;

Chart1: TChart;

Series1: TLineSeries;

Chart2: TChart;

Series2: TLineSeries;

Label3: TLabel;

Edit1: TEdit;

Label4: TLabel;

Edit2: TEdit;

Label5: TLabel;

Edit3: TEdit;

Label6: TLabel;

Edit4: TEdit;

Label7: TLabel;

Edit5: TEdit;

Label8: TLabel;

Edit6: TEdit;

Label9: TLabel;

Edit7: TEdit;

Label10: TLabel;

Edit8: TEdit;

Button3: TButton;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

N,M : IntType;

U,C1,L2,R3 : RealType;

t0, tmax, dt, t : RealType;

implementation

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

begin

Close;

end;

Procedure Gauss(A:Matrix; B:Vector; Var X:Vector);

Var

i, j, k : IntType;

h : RealType;

Begin

{прямой ход}

For i:= 1 to N do

For j:= i+1 to N do

begin

A[j,i]:= - A[j,i]/A[i,i];

B[j]:= B[j] + A[j,i]*B[i];

For k:= i+1 to N do

A[j,k]:= A[j,k] + A[j,i]*A[i,k];

end;

{обратный ход }

X[N]:= B[N]/A[N,N];

For i:= N-1 downto 1 do

begin

h:= B[i];

For j:= i+1 to N do h:= h - X[j] * A[i,j];

X[i]:= h/A[i,i];

Form1.ProgressBar2.Position:=Round(100/i/(N-1));

end;

end;

Procedure dFdt(t:RealType; Var X, dX : Vector);

Var

i,j : Integer;

A : Matrix;

B : Vector;

begin

For i:=1 to N do

For j:=1 to N do

A[i,j]:= 0;

A[1,1]:= L2; A[1,2]:= -C1*R3;

A[2,2]:= C1*R3;

B[1]:= -3*X[1];

B[2]:= U-X[2]+R3*X[1];

Gauss(A,B,dX);

end;

Procedure Eler;

Var

i : IntType;

X, dX : Vector;

begin

For i:=1 to N do X[i]:=0;

t:= t0;

While t<= tmax do

begin

Form1.Chart1.SeriesList[0].AddXY(t,X[1]);

Form1.Chart2.SeriesList[0].AddXY(t,X[2]);

dFdt(t,X,dX);

For i:=1 to N do

X[i]:=X[i]+dt*dX[i];

t:=t+dt;

Form1.ProgressBar1.Position:=Round(100/t/(N-1));

end;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Chart1.SeriesList[0].Clear;

Chart2.SeriesList[0].Clear;

U:=StrToFloat(Form1.Edit1.Text);

C1:=StrToFloat(Form1.Edit2.Text);

L2:=StrToFloat(Form1.Edit3.Text);

R3:=StrToFloat(Form1.Edit4.Text);

N:= StrToInt(Form1.Edit8.Text);

t0:= StrToFloat(Form1.Edit5.Text);

tmax:= StrToFloat(Form1.Edit6.Text);

M:= StrToInt(Form1.Edit7.Text);

dt:= (tmax-t0)/M;

Eler;

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

Chart1.SeriesList[0].Clear;

Chart2.SeriesList[0].Clear;

end;

end.