Добавлен: 20.05.2023
Просмотров: 191
Скачиваний: 3
colors = color;
data = (double*)malloc(testtime*sizeof(double));
colons = (int*) calloc(colon_count,sizeof(int));
mat = disp = timer = 0;
excess = assimetry = 0;
haveNextNextGaussian = false;
nextNextGaussian = 0;
distrib_run();
}
double rnd_test::signal_func(double x){
return next_gauss() + 1.0 * sin(freq*x+phi);
}
void rnd_test::distrib_run(){
distrib_test();
}
void rnd_test::distrib_test(){
if ((colon_count<=0)||(testtime<=0)) return;
double begin = clock();
double min = 1e200 , max = -1e200 , s = 0 ,s2 = 0, s3=0, s4=0;
for (int i = 0;i<testtime;i++){
data[i] = signal_func(i); //сигнал по функции
if (min > data[i]) min = data[i]; //определение мин и макс сигнала
if (max < data[i]) max = data[i];
s+=data[i];
s2+=data[i]*data[i];
s3+=data[i]*data[i]*data[i];
s4+=data[i]*data[i]*data[i]*data[i];
}
double h = 1.000*(max-min)/colon_count;
for (int i = 0;i<testtime;i++){
int index = int((data[i]-min)/h);
if ((index>=colon_count)){
index = colon_count-1;
}
colons[index] ++;
}
int maxcol = 1;
for (int i = 0;i<colon_count;i++)
if (colons[i]>maxcol) maxcol = colons[i];
double end = clock();
mat = s/testtime ;
disp = s2/testtime - mat*mat;
double CKO = sqrt(disp);
excess = s4/(disp*disp)/testtime-3.0 , assimetry = s3/disp/CKO/testtime;
timer = double(end - begin);
}
int rnd_test::getmax(int *data,int size){
int m = data[0];
for (int i=1;i<size;i++)
if (m<data[i]) m = data[i];
return m;
}
int rnd_test::getmin(int *data,int size){
int m = data[0];
for (int i=1;i<size;i++)
if (m>data[i]) m = data[i];
return m;
}
void rnd_test::draw(HWND hWnd){
PAINTSTRUCT ps;
HDC hdc;
RECT Rect;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd,&Rect);
int ey = Rect.bottom, by = Rect.top, ex = Rect.right, bx = Rect.left;
int maxy = (ey - by - 40 )/2 , maxx = int(0.95*(ex- bx));
int stepx = maxx / colon_count, minx = int(0.5*(ex- bx-stepx*colon_count));
if ((ex>=bx+colon_count)&&(ey>=16+by)){
int max = getmax(colons,colon_count);
int min = getmin(colons,colon_count);
for (int i=0;i<colon_count;i++){
HGDIOBJ hh = CreateSolidBrush(colors);
SelectObject(hdc,hh);
int curent_height = int(0.99*colons[i]*1.0/max*maxy);
Rectangle(hdc, minx + stepx*i,maxy,minx+stepx*(i+1),-curent_height + maxy);
DeleteObject(hh);
}
int *drawdata = (int*)malloc(sizeof(int)*colon_count);
for (int i=0;i<colon_count;i++) drawdata[i] = int(100*data[i]);
max = getmax(drawdata,colon_count);
min = getmin(drawdata,colon_count);
for (int i=0;i<colon_count;i++){
HGDIOBJ hh = CreateSolidBrush(colors*256);
SelectObject(hdc,hh);
int curent_height = int(99.99*data[i]*1.0/max*maxy);
Rectangle(hdc, minx + stepx*i,2*maxy,minx+stepx*(i+1),-curent_height + 2*maxy);
DeleteObject(hh);
}
}
int const charsize = 300;
TCHAR b[charsize]={0}, b1[charsize] = {0};
char a[charsize],a1[charsize]="Function has a signal ! \0";
sprintf_s(a,"M(X) = %6.3lf D(X) = %6.3lf Ecsess = %6.3lf Assimetry = %6.3lf Time spended %6.1lf ms\0",mat,disp,excess , assimetry , timer);
bool havesignal = (mat>0.1)||(fabs(excess)>0.1)||(fabs(assimetry)>0.1);
for (int i=0;i<charsize;i++){
if (a[i]>0) b[i] = 0 + a[i];
if (a1[i]>0) b1[i] = 0 + a1[i];
}
LPCWSTR A = (LPCWSTR)(&b) , A1 = (LPCWSTR)(&b1);
DrawText(hdc,A,-1,&Rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
if (havesignal)
DrawText(hdc,A1,-1,&Rect,DT_SINGLELINE|DT_RIGHT|DT_VCENTER);
EndPaint(hWnd, &ps);
}
double rnd_test::rnd(){ //from 0 to 1
int iy = rnd_seed * 1220703125;
if (iy<0)
iy = iy +1073741824 + 1073741824;
rnd_seed = iy;
return iy * 0.4656613e-9;
}
double rnd_test::uniform(double a,double b){//from a to b
return a + (b-a)*rnd();
}
double rnd_test::normal(double m, double s){ //normal light version
double a = 0;
for (int i=0;i<12;i++)
a+=rnd();
return m+(a-6.0)*s;
}
double rnd_test::erl(){ //erlang distrinbution 1 1
return erlang(1,1);
}
double rnd_test::erlang(double m, double s){ //erlang distrinbution
int k = int(s);
double a = 0, b = s-k;
for (int i =0;i<k;i++)
a+=eyler()*m;
if(rnd()<b)
a+=eyler()*m;
return a;
}
void rnd_test::srnd(int seed){
if (seed%2==0) seed++;
rnd_seed = seed;
}
double rnd_test::eyler(){
double R = 0;
while (R==0) R = rnd();
return log(1.0/R);
}
double rnd_test::next_gauss(){
if (haveNextNextGaussian) {
haveNextNextGaussian = false;
return nextNextGaussian;
} else {
double v1, v2, s;
do {
v1 = 2*rnd()-1; // between -1 and 1
v2 = 2*rnd()-1; // between -1 and 1
s = v1 * v1 + v2 * v2;
} while (s >= 1 || s == 0);
double multiplier = sqrt(-2 * log(s)/s);
nextNextGaussian = v2 * multiplier;
haveNextNextGaussian = true;
return v1 * multiplier;
}
}
Список использованной литературы
- Френкс Л. Теория сигналов.
- Румянцев П. В. Азбука программирования в Win 32 API.
- В.П. Цымбал Теория информации и кодирование. 1992, Издательское объединения «Высшая школа».
- Э.Хант. Исскуственный интеллект. 1998.Москва. «Мир».
- Б.Д. Кудряшов Теория информации. 2009, Учебник для ВУЗов.
- В.М.Сидельников. Теория кодирования.
- Герберт Шилдт - Полный справочник по Java SE 6 Edition Издательский дом «Вильямс» 2009
- Зверева О.М., Саблина Н.Г. Среда Турбо Паскаль 7.0. Реализация простейших алгоритмов: Конспект лекций. Часть 1. - Екатеринбург: Изд-во УМЦ-УПИ, 2011. - с.112
- Йенсен К., Вирт Н. Паскаль. Руководство для пользователя и описание языка.//Пер. с англ. и предисл. Д.Б.Подшивалова - М.: Финансы и статистика,1999. - с. 151
- Ключарев А.А., Матьяш В.А., Щекин С.В. Структуры и алгоритмы обработки данных: Учебное пособие - СПбГУАП. СПб,2013 – с. 21-30
- Краснов С.В. Программирование на языке высокого уровня TURBO PASCAL: Учебное пособие. - Ульяновск: УлГТУ, 2014. - с.27-31
- Моргун А. Н. Программирование на языке Паскаль (Pascal). Основы обработки структур данных. - М.: Диалектика, 2012. — с. 576
- Перминов О.Н. Программирование на языке Паскаль: Справочник.– М.: Радио и связь, 1999. – с.243-304
- MSDN
- Изучаем Java http://www.java-study.ru/java-uchebnik
- Шмидский Я.К. Самоучитель по программированию на языке СИ++ 2013г.
- Элементы теории графов. Ищенко М. Н. http://ppt4web.ru/matematika/ehlementy-teorii-grafov-sposoby-obkhodov-grafov.html
- Вятский социально-экономический институт. Кафедра Информатики и вычислительной техники. Теория графов и сетей. Методические указания. Т.В. Волченская.
- Научная библиотека http://edu.sernam.ru/book_p_math1.php?id=148
- Портал Алгоритмы методы исходники http://algolist.manual.ru/
- Портал Конспектов http://www.konspektov.net/
- Алгоритмы и Структуры данных Кормен
- http://www.intuit.ru/studies/courses/3505/747/lecture/26299
- http://metodist.lbz.ru/authors/informatika/2/files/pk/kl11gl2.pdf
- http://wm-help.net/lib/b/book/3683783285/34
- http://java.novgorod.ru/lect/Java_COURSE_Lec11.pdf
- http://www.cyberforum.ru/