Генерация случайных чисел
От: Yaroslav Украина  
Дата: 23.09.01 07:16
Оценка:
Привет
Нужна прога генерации случайных чисел по экспотенциальному закону
буду очень благодарен, если вы пришлете мне её на мыло
adating@ukrpost.net

Best Regards
Yaroslav
Re: Генерация случайных чисел
От: Yaroslav Украина  
Дата: 23.09.01 07:21
Оценка:
Здравствуйте Yaroslav, вы писали:

Y>Привет

Y>Нужна прога генерации случайных чисел по экспотенциальному закону
Y>буду очень благодарен, если вы пришлете мне её на мыло
Y>adating@ukrpost.net

Y>Best Regards

Y>Yaroslav


Пример одной такой,
но она с имеет пару глюков, если кто может исправит.


//******************* 1.cpp begins ****************


#include <stdio.h>
#include <math.h>
#include "hist.h"

#define a 10
#define b 24
#define n 1000
#define tb 1.202
#define bot 25
#define hei 20

//=============================================================================
void main()
{
histogram Histogram1(b-a, bot, hei, 3);

clrscr();
float Me = (a+b)/2;
float De = pow((b-a),2)/12;
printf("\t\t\tРавномерное распределение\n");
printf("Математическое ожидание: %.2f \t", Me);
printf("Доверительный интервал [%.2f;%.2f]\n", Me-tb*sqrt(De/n), Me+tb*sqrt(De/n) );
printf("Дисперсия: %.2f \t\t", De);
printf("Доверительный интервал [%.2f;%.2f]\n", De-tb*sqrt(2*De/(n-1)), De+tb*sqrt(2*De/(n-1)) );

unsigned long X0 = 111;
int l = pow(8,2)*2+3;
unsigned long M = 0 — 1;
double X1;
int X3;

for (int i = 0; i < n; i++)
{
X1 = (l * X0 + 43 ) % M;
X0 = X1;
double X2 = (X1 / M);
X1 = (X2 * (b — a)) + a;
X3 = (int)X1;
Histogram1.setValue(Histogram1.getValue(X3-a+1)+1, X3-a+1);
}
Histogram1.setAxisX(10);
Histogram1.draw();
getch();
//--------------------------------------------------------------------------
histogram Histogram2(b-a, bot, hei, 3);
int buffer[n];
clrscr();
Me = 0.0;
De = 0.0;

X0 = 11;
l = pow(8,2)*2+3;
M = 0 — 1;

for (int i = 0; i < n; i++)
{
X1 = (l * X0 + 43 ) % M;
X0 = X1;
double X2 = (X1 / M);
double X5 = -0.1*log(X2);
X1 = (X5 * (b — a)) + a;
X3 = (int)X1;
Me += X3;
buffer[i] = X3;
Histogram2.setValue(Histogram2.getValue(X3-a+1)+1, X3-a+1);
}

Me /= n;

for (int i = 0; i < n; i++)
{
De += pow(buffer[i] — Me, 2);
}

De /= n-1;

Histogram2.setAxisX(10);
Histogram2.draw();
goto xy(1, 1);
printf("\t\t\t\tЭкспоненциальный закон\n");
printf("Математическое ожидание: %.2f \t", Me);
printf("Доверительный интервал [%.2f;%.2f]\n", Me-tb*sqrt(De/n), Me+tb*sqrt(De/n) );
printf("Дисперсия: %.2f \t\t", De);
printf("Доверительный интервал [%.2f;%.2f]\n", De-tb*sqrt(2*De/(n-1)), De+tb*sqrt(2*De/(n-1)) );
getch();
}

//****************** hist.h begins ****************

#ifndef HIST_H
#define HIST_H

#include <conio.h>

class histogram{
public:
histogram(int pcount, int pbottom, int pheight, int pleft);
void setValue(int pvalue, int pcount);
inline void setAxisX(int value) {axisX = value;}
int getValue(int pcount);
void draw();
~histogram();
private:
int count;
int bottom;
int height;
int left;
int *pcolumns;
int axisX;
};

histogram::histogram(int pcount, int pbottom, int pheight, int pleft)
{
if (pcount > 0 && pcount < 81)
{
count = pcount;
pcolumns = new int[count];
for (int i = 0; i < count; i++) pcolumns[i] = 0;
}
if (pbottom > 0) bottom = pbottom;
if (pheight > 0) height = pheight;
if (pleft > 0) left = pleft;
axisX = 1;
}

histogram::~histogram()
{
if (pcolumns != NULL) delete pcolumns;
}

void histogram::draw()
{
int max=0;
int ii = 0,f=0;
for (int i=0;i<count;i++) {if (pcolumns[i]>max) max=pcolumns[i];}

for (i = 0; i < count; i++)
{
int bound = ((height-1)*pcolumns[i]/max);
l1: char fill = '-';
for (int j = 0; j < bound; j++)
{
goto xy; (ii+left, bottom — j-1);
putch(fill);
}
fill = ' ';
for ( j = bound; j < height-1; j++)
{
goto xy; (ii+left, bottom — j-1);
putch(fill);
}
ii++;
if ((79-left)/count&&!f) {f = ((79-left)/count-1);goto l1;}
if (--f) goto l1;
goto xy; (ii+left, bottom);
putch('.');

}
goto xy;(left, bottom); printf("%d", axisX);
goto xy;(left+ii-1, bottom); printf("%d",count + axisX);
goto xy;(left+ii, bottom-1); putch('0');
goto xy;(left+ii, bottom-height); printf("%d",max);
}

void histogram::setValue(int pvalue, int pcount)
{
if (pcount > count && pcount < 1) return;
pcolumns[pcount-1] = pvalue;
}

int histogram::getValue(int pcount)
{
return pcolumns[pcount-1];
}

#endif
Re[2]: Генерация случайных чисел
От: Yaroslav Украина  
Дата: 25.09.01 13:00
Оценка:
Извините я немного не разобрался программа
не имеет ошибок она просто была написана под
досовский борланд!
Ярослав
Re[3]: Генерация случайных чисел
От: Yurry  
Дата: 25.10.01 07:48
Оценка:
Здравствуйте Yaroslav, Вы писали:

Y>Извините я немного не разобрался программа

Y>не имеет ошибок она просто была написана под
Y>досовский борланд!
Y>Ярослав
Re[4]: Генерация случайных чисел
От: Yurry  
Дата: 25.10.01 07:52
Оценка:
Cначала пиши ф-ю
int CKonArDlg::RandomMy(int max_rnd)
{
int rnd;
do
rnd=rand();
while (!(rnd>=0 && rnd<=max_rnd));
return rnd;

}
когда использовать

srand( (unsigned)time( NULL ) );
int N4=RandomMy(2);
это один из вариантов
Re: Генерация случайных чисел
От: Kot Украина  
Дата: 25.10.01 08:06
Оценка:
Здравствуйте Yaroslav, Вы писали:

Y>Привет

Y>Нужна прога генерации случайных чисел по экспотенциальному закону
Y>буду очень благодарен, если вы пришлете мне её на мыло adating@ukrpost.net

Проги у меня нету :( но, если я не ошибаюсь, имея возможность сгенерировать равномерно распределённую случайную величину, ты можешь подставить её в формулу нужного тебе закона и получить что требуется, в частности — экспоненциальный.
----
With best regards, Kot Burov aka W@ndERR ®
UIN: 108043419
--------
Re[2]: Генерация случайных чисел
От: yogi Россия  
Дата: 29.10.01 16:33
Оценка:
Здравствуйте Kot, Вы писали:

Kot>Проги у меня нету :( но, если я не ошибаюсь, имея возможность сгенерировать равномерно распределённую случайную величину, ты можешь подставить её в формулу нужного тебе закона и получить что требуется, в частности — экспоненциальный.


Вы совершенно правы. Пусть X — равномерно распр. на отрезке [0,1], тогда для функции распределения f(y)=c*exp(-c*y) имеем Y=(1/c)*ln(X). Y — распределено показательно...
Путь к сердцу женщины лежать не должен.
Re: Генерация случайных чисел
От: sluge  
Дата: 29.10.01 18:40
Оценка:
Здравствуйте Yaroslav, Вы писали:

Y>Привет

Y>Нужна прога генерации случайных чисел по экспотенциальному закону
Y>буду очень благодарен, если вы пришлете мне её на мыло
Y>adating@ukrpost.net

Y>Best Regards

Y>Yaroslav

попльзуй матлаб, там даже есть белый шум:)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.