Добавил:
kaslp1939@mail.ru Казимиров Леонид Петрович , инженер- механик по летательным аппаратам Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СТАТИСТИЧЕСКОЕ МОДЕЛИРОВАНИЕСЛОЖНЫХ СИСТЕМ(АЛГОРИТМ И ПРОГРАММА).docx
Скачиваний:
0
Добавлен:
23.10.2021
Размер:
5.69 Mб
Скачать
  1. Описание программы

Блок-схема программы представлена на рис.1. Основными элементами программы являются рабочие процедуры MCCH (моделирование случайного числа с заданным законом распределения) и ctatobr (обработка результатов), и обслуживающая процедура OGR. Оператор Ф(х), или исследуемая модель, представлен в программе в виде автономно запрограммированной процедуры F(X, Y, П), что обеспечивает большую оперативность в использовании программы.

Листинг программы приведен ниже.

program ObchijSTATModeling;

uses

Vcl.Forms,

VEKTOR in 'VEKTOR.PAS',

TYPEDATA in 'TYPEDATA.PAS',

Global_ID_Data in 'Global_ID_Data.pas',

ServisProcess in 'ServisProcess.PAS',

Unit1graf in 'Unit1graf.pas' {Form1Graf},

STATUNITProcess in 'STATUNITProcess .PAS',

Start in 'Start.pas' {Form1Start},

Strexplode in 'Strexplode.pas',

ProOtladka in 'ProOtladka.PAS',

Unit1TT in 'Unit1TT.pas' {Form1},

CopyToClipboardTextQN in 'CopyToClipboardTextQN.pas',

MainStatProcess in 'MainStatProcess.pas' {IdStatMode},

ShellAdd in 'ShellAdd.pas';

{$R *.res}

begin

Application.Initialize;

Application.MainFormOnTaskbar := True;

Application.CreateForm(TForm1Start, Form1Start);

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm1Graf, Form1Graf);

Application.CreateForm(TIdStatMode, IdStatMode);

Application.Run;

end.

Последовательность выполнения программы.

Последовательность выполнения программы описана ниже.

В начале счёта выполняется процедура OGR(MBX,MBUX,Q,NMAX, MK);

Далее счёт ведется в цикле

for N:=1 to Nmax do begin

MCCH(MBUX,MK,N,Q, BXStat);

//+++++++++++++++++++++++++++++++++++++++

Ф(х)

//+++++++++++++++++++++++++++++++++++++++

ctatobr(BUX,F,MPR,MFR,MX1,MF, MXBux,N,Nmax,W,Nvux);

end;

Результаты счёта сохраняются процедурой SaveFile.

// MF[k,5] iMF:string; nameiMF:string;

// var F,MF, MPR,MFR,MX1:raF;

for i:=1 to Nvux do begin

iNvux :=IntToStr(i);

nameMXBux:=(iNvux+' Параметры выходного вектора ');

nameMPR:=(iNvux+' Нормированная плотность распределения ');

nameF:=(iNvux+' Ненормированная Функция распределения ');

nameMFR:=(iNvux+' Нормированная Функция распределения ');

nameMX1:=(iNvux+' Координата Х функции распределения');

// Nvux

SaveFile(i,MXBux,nameMXBux,TFile );

SaveFile(i,MX1,nameMX1,TFile );

SaveFile(i,MPR,nameMPR,TFile );

SaveFile(i,MFR,nameMFR,TFile );

SaveFile(i,F,nameF,TFile );

end;

Процедура ogr

Процедура OGR служит для проверки исходных данных и вычисления констант.

procedure OGR( M:raM100_10;var MBUX:raM100_10;Q,NMAX:integer;var MK:raX);

// вычисляется интервал изменения i-й величины Xmax-Xmin

М - массив, описан на стр.4,

Q - количество элементов случайного вектора X;

Nmax заданное число реализаций;

MK - массив констант, используемых при работе MCCH (выходной массив процедуры OQR.).

входной вектор M заменяется на MBUX

вектор M - формируется при вводе исходных данных,

в procedure OGR эти данные пересчитываются в соответствии с законом распределения и запоминаются в MBUX.

По меткам 10,0,1,2,3,4 разделены операции в соответствии с законом распределения.

Метка 10 используется для вектора const.

10: if ABS(M[j,1]-10)<1.0E-4 then begin

//вектор const

// if round(M[j,1])=10 then begin

//вектор const, интервал изменения не задаётся M[j,4], M[j,5]

MK[j]:= 0; //MBUX[j,5]; //Xmax-Xmin = 0

0: if M[j,1]<1.0E-4 then begin

//равномерная выборка интервал изменения задан M[j,4], M[j,5]

MK[j]:=NMAX;

// MK[j]:=MBUX[j,5]; //Xmax-Xmin

1: if ABS(M[j,1]-1)<1.0E-4 then begin MBUX[j,2]:=0;

//равномерный закон интервал изменения задан M[j,4], M[j,5]

MBUX[j,3]:=0; MK[j]:=MBUX[j,5]; //Xmax-Xmin

// M[j,4]//Xmin

2: if ABS(M[j,1]-2)<1.0E-4 then begin

//нормальное распределение интервал изменения вычисляется

MBUX[j,4]:=M[j,2]-3*M[j,3]; //Xmin

MBUX[j,5]:=6*M[j,3];

MK[j]:=MBUX[j,5]; //Xmax-Xmin

3: if ABS(M[j,1]-3)<1.0E-4 then begin

//бета- распределение интервал изменения вычисляется

// M[j,2]//alfa M[j,3]//beta

//MK[j]:=вычисляется коэффициент А для нормализации функции f(x)

// MBUX[j,5]; //Xmax-Xmin

// MK[j] -нормирующий коэффициент для плотности рапределения

MBUX[j,4]:=MBX[j,4]; //Xmin

MBUX[j,5]:=X; //Xmax-Xmin

4: if ABS(M[j,1]-4)<1.0E-4 then begin

//гамма- распределение интервал изменения Х вычисляется

// для заданной Pdov-доверительной вероятности.

Для этого используется процедура

ChetPdovFgamma (teta,lambda, Pdov, X );

lambda := M[j,2]; teta:= M[j,3]; Pdov:= M[j,5];