- •Реферат
- •Введение
- •1. Теоретическая часть.
- •Закон распределения Симпсона.
- •Метод Бусленко.
- •Оценка качества последовательности по гистограмме распределения.
- •2. Практическая часть
- •Погрешность этого генератора не превышает 10%. Зависимость случайных чисел и процента погрешности приведены на рисунке 2.
- •Зависимость представлена в виде графика, где по горизонтальной оси отложены количество чисел, а по вертикальной оси проценты погрешности. Исследование проводилось при количестве интервалов равному 30.
- •Список литературы
2. Практическая часть
В курсовой работе исследовал метод построения генератора случайных чисел распределенных по закону Симпсона и последующую проверку построенного генератора. Проверку осуществлял при помощи гистограмм.
Генератор имеет следующие параметры:
c = 4
l = 2
a = 0
b = 8
-
Блок-схема алгоритма.
Начало
Определение
переменных
Разбиение
на интервалы
Генерация
чисел из базовой последовательности
Проверка
по гистограмме
t:=t+1
q:=q+simpson(10,3,x1)*0.001; x1:=x1+0.001;
n[t]:=nn[t]+1;
a[i]:=x1-0.001; i:=i+1;
deltas:=0;
ll:=q1; ob_ploshtr:=0;
ploshpr:=nn[i]/m i:=i+1
z1:=random;z2:=random;
i:=random(n+1); j:=j+1; y[j]:=a[i]+z2*(a[i+1]-a[i]);
ploshtr:=((simpson(10,3,ll)+
simpson(10,3,ll+l))*l)/2;
ll:=ll+l;
ob_ploshtr:=ob_ploshtr+ploshtr; deltas:=deltas+abs(ploshpr-ploshtr);
l:=(q2-q1)/n;
c[i]:=q1+l*i;
nn[i]:=0;
гистограмма
2.2 Результаты исследования работы генератора.
Генерацию случайных чисел распределенных по закону Симпсона проводили с помощью метода Бусленко. Генерировалось 4000 случайных чисел распределенных на интервале от 0 до 16. Заданный отрезок разбивали на 30 интервалов. Результаты, выдаваемые программой следующие. На рисунке 1 приведены результаты работы генератора.
Рисунок 1
Расчет точности:
- теоретическая площадь.
- практическая площадь.
- разность между практической и теоретической площадью.
- погрешность.
Погрешность этого генератора не превышает 10%. Зависимость случайных чисел и процента погрешности приведены на рисунке 2.
Рисунок 2
Зависимость представлена в виде графика, где по горизонтальной оси отложены количество чисел, а по вертикальной оси проценты погрешности. Исследование проводилось при количестве интервалов равному 30.
Из графика видно, что при увеличении чисел точность генератора улучшается.
Вывод
При исследовании предметной области было установлено, что точность генератора зависит от количества чисел и интервалов. При написании программы был использован встроенный генератор случайных чисел. Но нужно отметить, что он генерирует псевдослучайные числа. Это отражается на точности генератора. Учитывая результаты данной работы по моделированию, можно построить первоначальную модель и проанализировать её некоторые аспекты. Более точное моделирование требует других аппаратных и программных средств.
Список литературы
-
Вентцель Е.С., Овчаров Л.А. Теория вероятностей и её инженерные приложения, М: Наука, 1988.
-
Вентцель Е.С. Исследование операций, М:Наука, 1980.
-
Лифшиц А.Л. Статистическое моделирование СМО, М., 1978.
4. Гмурман В.Е. Теория вероятностей и математическая статистика, М: Высшая школа, 2001.
Приложение
Листинг программы.
const
n=30; {Chislo otrezkov}
m=4000; {Chislo tochek}
var
ob_ploshtr,deltas,ploshtr,ploshpr,ll,delta_s,
l,p,q1,q2:real;
c,y:array [0..m] of real;
a,zi,f_zi:array[0..n] of real;
NN,WI:array [1..n] of integer;
xi,yi,S,i,j,t:integer;
q:extended;
function simpson(c:real; l:real; x:real):extended;
begin
if ((x<=c-2*l) or (x>c+2*l)) then
simpson:=0;
if ((x>c-2*l) and (x<=c)) then
simpson:=(x-(c-2*l))/(4*sqr(l));
if ((x>c) and (x<=c+2*l)) then
simpson:=((c+2*l)-x)/(4*sqr(l));
end;
begin
paintbox1.Canvas.Brush.color:=clwhite;
paintbox1.Canvas.Rectangle(0,0,paintbox1.Width,paintbox1.Height);
p:=0;
q1:=4;
q2:=16;
x1:=q1;
p:=0.999999;
a[0]:=q1;
q:=0;
x1:=q1;
for i:=1 to n do
begin
repeat
q:=q+simpson(10,3,x1)*0.001;
x1:=x1+0.001;
until (q>(p*i)/n) ;
a[i]:=x1-0.001;
end;
randomize;
for j:=1 to m do
begin
z1:=random;
z2:=random;
i:=random(n+1);
y[j]:=a[i]+z2*(a[i+1]-a[i]);
end;
l:=(q2-q1)/n;
for i:=0 to n do BEGIN c[i]:=q1+l*i; nn[i]:=0;end;
for i:=1 to m do
begin
t:=-1;
repeat t:=t+1; until y[i]<=c[t];
nn[t]:=nn[t]+1;
end;
j:=0;
for i:=0 to n do j:=j+nn[i];
for i:=1 to n do wi[i]:=trunc(m*f_Zi[i]*l);
deltas:=0;
ll:=q1;
ob_ploshtr:=0;
for i:=1 to n do
begin
ploshpr:=nn[i]/m;
ploshtr:=((simpson(10,3,ll)+simpson(10,3,ll+l))*l)/2;
ll:=ll+l;
ob_ploshtr:=ob_ploshtr+ploshtr;
deltas:=deltas+abs(ploshpr-ploshtr);
end;
deltas:=deltas*100;
j:=0;
for i:=0 to n do
begin
paintbox1.Canvas.Rectangle(i*10,200,i*10+11,200-trunc(nn[i]*kh/(m*l)))
end;
for i:=1 to n*10 do
begin
xi:=i;
xx:=4+xi/(10*n/12);
yy:=simpson(10,3,xx);
yi:=trunc(kh*yy);
paintbox1.Canvas.Pixels[10+xi,200-yi]:=clred;
end;
Edit1.text:=copy(floattostr(deltas),1,4)+'%';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
paintbox1.Canvas.Brush.color:=clwhite;
paintbox1.Canvas.Rectangle(0,0,paintbox1.Width,paintbox1.Height);
end;
end.