Проблема в том что при постройке графика дисперсии прога виснет.
Код
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, comobj, activex;
type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
Label7: TLabel;
Button3: TButton;
Button2: TButton;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3, Unit4;
{$R *.dfm}
//
function eexp(n:double;te:double):double;
var sum:double;
count:double;
y:real;
begin
sum:=0;
count:=0;
randomize;
while count<=n do begin
y:=random(99)/100;
sum:=sum+(-2/te*ln(1-y));
count:=count+1;
end;
sum:=sum/n;
result:=sum;
end;
//
function dexp(n:double;te:double):double;
var sum:double;
count:double;
y,x:real;
begin
sum:=0;
count:=0;
randomize;
while count<=n do begin
y:=random(99)/100;
x:=(-2/te)*ln(1-y);
sum:=sum+(x-eexp(10,te));
end;
sum:=sum/n;
result:=sum;
end;
procedure TForm1.Button1Click(Sender: TObject);
var te,a,x:double;
n:integer;
y:real;
begin
form2.show;
a:=20;
te:=5;
randomize;
for n:=0 to 20 do begin
y:=random(99)/100;
x:=(-2/te)*ln(1-y);
form2.Series1.AddXY(x,1-exp(-te*x)-(x*exp(-te*x)),'',clRed);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var //b:integer;
te,a:double;
begin
form3.show;
// a:=strtoint(form1.edit1.text);
a:=20;
form3.series1.clear;
te:=0.5;
while te <=a do
begin
//te:=round(i);
form3.series1.addxy(te, 2/te,'',clRed);
te:=te+te;
end;
te:=0.5;
while te<=a do
begin
form3.series2.addxy(te,eexp(100,te),'',clBlue);
te:=te+te;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
var count:integer;
te,a,sum:double;
begin
form4.show;
// a:=strtoint(form1.edit1.text);
a:=30;
form4.series1.clear;
te:=0.1;
while te <=a do
begin
//te:=round(i);
form4.series1.addxy(te, 2/(te*te),'',clRed);
te:=te+0.1;
end;
te:=0.1;
while te<=0.9 do
begin
form4.series2.AddXY(te,dexp(1,te),'',clBlue);
te:=te+0.1
end;
end;
end.
Практически дисперсию можно найти по формуле 1/n* сумма (Xi-Xсреднее).
Вот мне надо проделать это примерно 100 раз и усредненное значение будет примерно равно тетта.
х= (-2/тетта)*Ln(1-y)
y=random
Функция eexp - считает x среднее при данном тетта.
Функция dexp - считает как раз 1/n* сумма (Xi-Xсреднее).
Проблема новое окошко form4 виснет при запуске, причем даже если поставить всего один пробег.
Укажите на ошибку пожалуйста!