Новичок
Джуниор
Регистрация: 20.04.2014
Сообщений: 1
|
Моделирование случайных величи
Нам дан вот такой пример, менять вроде как объяснил препод нужно то, что выделено..
Код:
Program Test_08;
{Тестирование генераторов случайных чисел}
Const
Nx=20000; {Максимальное число реализаций}
N1=1000; {Период проверки}
{Менять отсюда}
Var
a,b,c,p:real; {Параметры распределения}
Xsr,Sigma,r:real;{Среднее,квадр.отклонение, коэф.корреляции}
Xs,Sig,r_:real;{Теоретические среднее,квадр.отклонение}
dXsr,dSigma:real;{Отклонения от теор. значений}
iv:1..2;
n:integer;
X,X1:real;
S1,S2,S3:real;{Накапливаемые статистики}
Fil:text;
Function Gistograma(a,b,c,p:real):real;
{Генератор случайных чисел по гистограмме}
Var
g:real; {случайное число в интервале 0..1}
Begin
g:=random;
if g<p then begin g:=random; Gistograma:=a+g*(b-a) end
else begin g:=random; Gistograma:=b+g*(c-b) end;
End;
Procedure Param(a,b,c,p:real;Var Xsr,Sigma:real);
{Вычисление математического ожидания Xsr и квадратичного отклонения
Sigma генерируемой случайной величины}
Var X2:real;
Begin
Xsr:=p*(a+b)/2+(1-p)*(b+c)/2;
X2:=p*(a-c)*(a+b+c)/3+(b*b+b*c+c*c)/3;
Sigma:=sqrt(X2-Xsr*Xsr);
End;[/B]
{И до сюда}
BEGIN
writeln('Куда выводить результаты ? 1 - экран, 2 - файл Test_08.rez');
readln(iv);
if iv=1 then assign(Fil,'Con')
else assign(Fil,'Test_08.rez');
rewrite(Fil);
writeln('Введите параметры распределения a,b,c,p');
readln(a,b,c,p);
{Вывод шапки таблицы}
writeln(Fil,'Результаты тестирования распределения с параметрами');
writeln(Fil,' a=',a:8:2,' b=',b:8:2,' c=',c:8:2,' p=',p:8:2);
Writeln(Fil,'┌───────┬────────┬──────┬────────┬──────┬──────┬');
Writeln(Fil,'│ N │ Xsr │ dXs │ Sigma │dSigma│ r │');
Writeln(Fil,'├───────┼────────┼──────┼────────┼──────┼──────┤ ');
S1:=0; S2:=0; S3:=0;
Param(a,b,c,p,Xs,Sig); {Расчет теоретических значений}
r_:=0;
for n:=1 to Nx do
begin
X:=Gistograma(a,b,c,p);
S1:=S1+X; S2:=S2+X*X;
if n>1 then S3:=S3+X*X1;
X1:=X;
if n mod N1 = 0 then
begin
Xsr:=S1/n;
dXsr:=abs(Xsr-Xs);
Sigma:=sqrt(S2/n-Xsr*Xsr);
dSigma:=abs(Sigma-Sig);
r:=(S3/(n-1)-Xsr*Xsr)/sqr(Sigma);
writeln(Fil,'│ ',n:5,' │',Xsr:7:3,' │',dXsr:6:3,'│',Sigma:7:3,' │',dSigma:6:3,'│',r:6:3,'│');
end;
end;
Writeln(Fil,'├───────┼────────┼──────┼────────┼──────┼──────┤');
writeln(Fil,'│Точ.зн.│',Xsr:7:3,' │ │',Sig:7:3,' │ │',r_:6:3,'│');
Writeln(Fil,'└───────┴────────┴──────┴────────┴──────┴──────┘');
readln;
close(Fil);
END.
Нужно её изменить для расчета с помощью логарифмически нормального распределения.
Последний раз редактировалось Romen1992; 20.04.2014 в 12:57.
|