IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Виснет программа
сообщение
Сообщение #1


Гость






Написал программу которая должна строить практические и теоритические графики мат.ожидания, дисперсии и самой функции.
Проблема в том что при постройке графика дисперсии прога виснет.
Код

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 виснет при запуске, причем даже если поставить всего один пробег.

Укажите на ошибку пожалуйста!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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;

условие выхода из цикла связано с count
а где этот count изменяется?

з.ы. сама такое же сейчас пишу sad.gif только у меня несколько видов распределений, генератор случайных чисел, моменты до 4-го порядка, проверка по критерию хи-квадрат...
в общем, мат статистика - жестокая штука.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Большое спасибо =)

У нас это все в курсе теории вероятностей...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.10.2020 22:08
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name