Читайте также:
|
|
1. Потапов М. К. Алгебра и анализ элементарных функций. - М.: Наука, 1980.
2. Ануфриев И. Е. Самоучитель Matlab 5.3/6.x. СПб: БХВ-Петербург, 2002.
3. Емельянов В.Ю. Методы моделирования стохастических систем управления. - СПб.: БГТУ, 2004.
4. Бобровский С. DELPHI 7. Учебный курс.- СПБ.: Питер, 2003.
Приложение А
Статистическое моделирование
%Файл-функция difun для решения
%дифференциального уравнения первого порядка:
%созданная по требованию функции ode
function f = difun(t,x);
global a k g i A;
f=[a(i)*x(1)+k(i)*a(i)*g];
clear all;
clc;
global i g a k A;
n=0;
m=0;
g=1;
A=0;
n_treb=100;
n_mas=[1000 3000 5000 7000 9000 12000 15000 17000 20000];
disp('Номер итерации Mx Dx n_treb Общее кол-во опытов');
while 1;
m=m+1; % Количество итераций алгоритма
a=unifrnd(0.6, 1.1, 1, n_treb); % Распределение а по непрерывному равномерному распределению
k=unifrnd(1, 1.5, 1, n_treb); % Распределение k по непрерывному равномерному распределению
for i=n+1:n_treb
[t,x] = ode23('difun', [0 1], A);
[str, sto]=size(x);
x_k(i)=x(str);
end;
Mx=sum(x_k)/n_treb;
Dx=sum(x_k.^2)/(n_treb-1)-Mx^2;
n=n_treb;
n_treb=round(9*Dx/0.0001);
d=[m Mx Dx n_treb n];
fprintf(' %5.0f %8.6f %8.6f %5.0f %5.0f\n',d);
if (n>19800)
break;
end;
if (n_treb>n_mas(m))
n_treb=n_mas(m);
end;
end;
Приложение Б
Рациональное моделирование
форма файла Project1
Текст программы (с сокращениями описания формы)
unit Project;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
Memo1… Memo12: TMemo;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
PageControl1: TPageControl;
TabSheet1…TabSheet6: TTabSheet;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
h=0.001;
eps=0.01;
alfa=9;
Pk=0.1;
A=0;
G=1;
povtor=800;
kill=10;
t=1;
var
Nk:array [1..10] of longint;
Dk:array [1..10] of real;
ntreb,n:real;
i,j,jj,jj1:integer;
f:boolean;
Dx,Mx,Mxcp,Sx,Sx2,x,qk2,qk,aa,k,Disp,treal,xn:real;
begin
randomize;
ntreb:=200;
n:=0;
f:=true;
jj1:=0;
Memo1.Lines.clear; Memo12.Lines.Clear;
while n<ntreb do begin
Dx:=0;
Mx:=0;
qk:=0;
Mxcp:=0;
Disp:=0;
for i:=1 to kill do begin
Sx:=0;
Sx2:=0;
if f then
Nk[i]:=9
else
Nk[i]:=round(ntreb*Pk*sqrt(Dk[i])/qk2);
for j:=1 to Nk[i] do begin
// k:=random*Pk*0.6+1+Pk*(i-1)*0.6;
k:=random*1+0.5;
aa:=random*0.6+0.5;
x:=A;
for jj:=1 to povtor do begin
x:=(aa*x+aa*k*G)*h+x;
end; Sx:=Sx+x;
Sx2:=Sx2+sqr(x);
end;
Mx:=Sx/Nk[i];
Dk[i]:=Sx2/Nk[i]-sqr(Sx/Nk[i]);
Dx:=Dx+(Pk*Pk)*Dk[i]/Nk[i];
Mxcp:=Mxcp+Pk*Sx/Nk[i];
case i of
1: begin //Memo1.Lines.Clear;
Memo1.Lines.Add('Mx='+FloatToStr(Mx));
Memo1.Lines.Add('Dx='+FloatToStr(Dk[i]));
Memo1.Lines.Add('Disp='+FloatToStr(Disp));
Memo1.Lines.Add('Nk='+FloatToStr(Nk[i]));
Memo1.Lines.Add('Sx='+FloatToStr(Sx));
Memo1.Lines.Add('Sx2='+FloatToStr(Sx2));
Memo1.Lines.Add('n='+FloatToStr(n));
Memo1.Lines.Add('ntreb='+FloatToStr(ntreb));
end;
…….
10: begin //Memo10.Lines.Clear;
Memo10.Lines.Add('Mx='+FloatToStr(Mx));
Memo10.Lines.Add('Dx='+FloatToStr(Dk[i]));
Memo10.Lines.Add('n='+FloatToStr(n));
Memo10.Lines.Add('ntreb='+FloatToStr(ntreb));
Memo10.Lines.Add('Disp='+FloatToStr(Disp));
Memo10.Lines.Add('Nk='+FloatToStr(Nk[i]));
Memo10.Lines.Add('Sx='+FloatToStr(Sx));
Memo10.Lines.Add('Sx2='+FloatToStr(Sx2));
end;
end;
qk:=Pk*sqrt(Dk[i])+qk;
Disp:=Disp+Dk[i]*qk/(Pk*sqrt(Dk[i]));
end;
qk2:=qk;
Memo11.Lines.Add('Mxcp='+floattostr(Mxcp));
Memo11.Lines.Add('Dxcp='+floattostr(Dx));
edit1.Text:=floattostr(Mxcp);
edit2.Text:=floattostr(Dx);
n:=ntreb;
ntreb:=round(alfa*Disp*sqr(Pk)/sqr(eps));
Memo12.Lines.Add('n='+floattostr(n));
Memo12.Lines.Add('ntreb='+floattostr(ntreb));
edit3.text:=floattostr(ntreb); f:=false; end; end; end.
Дата добавления: 2015-12-08; просмотров: 48 | Нарушение авторских прав