Формування вхідних потоків і контролю їх якості для комп’ютерного моделювання складних систем статистичними методами

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення

Інформація про роботу

Рік:
2009
Тип роботи:
Звіт
Предмет:
Моделювання
Група:
ПІ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Інститут КНІТ Кафедра ПЗ ЗВІТ До лабораторної роботи № 1 На тему: “Формування вхідних потоків і контролю їх якості для комп’ютерного моделювання складних систем статистичними методами” З дисципліни : "Моделювання програмного забезпечення" Мета роботи: одержання послідовностей псевдовіпадковіх квазірівномірно розподілених чисел запропонованими методами та перевірка їх якості. Завдання: 1.Одержати послідовності псевдовіпадковіх квазірівномірно розподілених чисел при заданих параметрах для кожного з ніжчевказаніх способів: - методу серединний квадратів; - мультіплікатівного методу; - за допомогою вбудованих функцій із програмного забезпечення комп'ютера. 2.Кожну з генерованіх послідовностей перевірити на рівномірність двома методами: - за гістограмою; - за непрямими ознаками. 3.Кожну з генерованіх послідовностей провірити на незалежність методом, оснований на обчисленні кореляційного моменту. 4.Перевірити одержані послідовності на стохастічність. Код програми //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "CSPIN" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) {Label6->Caption=""; Label7->Caption=""; //метод серединних квадратів long double mas_s_k[100000]; Memo1->Clear(); double X1 = StrToFloat(Edit1->Text); mas_s_k[0]= X1; int N = StrToInt(CSpinEdit1->Text); Memo1->Text = Memo1->Text + FloatToStrF(X1,ffFixed,6,4)+" "; double Xi = X1; int k= Edit1->Text.Length(); int s =ceil((k-2)/2); if(s*2!=(k-2)) k=k+1; double mn1=1; double mn2=1; for(int i1=0;i1<ceil((k-2)/2);i1++) mn1*=10.0; for(int i1=0;i1<k-2;i1++) mn2*=10.0; for(int i=1; i<N; i++) { double dtmp; Xi = Xi*Xi; Xi = modf(Xi*mn1 ,&dtmp); Xi = modf(Xi*mn2,&dtmp); Xi = dtmp/mn2; if(CheckBox1->Checked) Memo1->Text = Memo1->Text + FloatToStrF(Xi,ffFixed,6,k-2)+" "; mas_s_k[i]= Xi; Image2->Canvas->Pixels[floor(mas_s_k[i-1]*100)][floor(mas_s_k[i]*100)]=clRed; } //закінчення методу серединних квадратів int m[21]; //обнулення масиву for(int i=0;i<21;i++) m[i]=0; //кількість чисел на проміжку for( int i=0;i<N;i++) for(int j=1;j<=20;j++) { if(mas_s_k[i]<=0.05*j) {m[j-1]=m[j-1]+1; break; } } //побудова гістограми for(int i=0;i<20;i+=1) { Series1->Add((m[i]),IntToStr(i),clRed); } //задання розмірів зображення Image2->Width=100; Image2->Height=100; Image2->Canvas->Brush->Color=clRed; //перевірка на стохастичність double hi2 = 0; int d = 5; double mas1[10]; double p[10]; double cnt = 0; int a = 0; double dl = 1.0 / d; for (double j = 0; j < 1; j += dl) { cnt = 0; for (int i = 0; i < N; i++) { if (mas_s_k[i] > j && mas_s_k[i] <= (j + dl)) cnt++; } mas1[a] = cnt; p[a] = mas1[a] / N; a++; } for (int i = 0; i < d; i++) if (p[i] != 0) hi2 = hi2 + pow((mas1[i] - N * p[i]), 2) / (N * p[i]); double hia2 = 0.352; if (hi2 >= hia2) Label6->Caption = "Гіпотеза не вірна"; else Label6->Caption =Label6->Caption+"Гіпотеза вірна зі імовірністю 95% " + " Критерій Х2=" +FloatToStr(hi2); //завершення перевірки // кореляційні моменти double SXi = 0, SXit = 0, SXiXit = 0, SXi2 = 0, SXit2 = 0; int t=0; for (int i = 0; i < N - t; i++) { SXi += mas_s_k[i]; SXit += mas_s_k[i + t]; SXiXit += mas_s_k[i] * mas_s_k[i + t]; SXi2 += mas_s_k[i] * mas_s_k[i]; SXit2 += mas_s_k[i + t] * mas_s_k[i + t]; } double DXi, DXit; DXi = 1.0 / (N - t) * SXi2 - 1.0 / ((N - t) * (N - t)) * SXi * SXi; DXit = 1.0 / (N - t) * SXit2 - 1.0 / ((N - t) * (N - t)) * SXit * SXit; double Pt; Pt = (1.0 / (N - t) * SXiXit - (1.0) / ((N - t) * (N - t)) * SXi * SXit) / sqrt(DXi * DXit); double B; B=1- (abs(Pt)*sqrt(1.0/N)); if ((Pt >=0) && (Pt <=1)) Label7->Caption = "Послідовність незалежна з імовірністю " +FloatToStrF(B,ffFixed,4,4) ; else Label7->Caption = "Послідовність залежна з імовірністю "+FloatToStr(Pt) ; } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit2Change(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::CSpinEdit1Change(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp");randomize(); Edit2->Visible=false;Edit3->Visible=false; Label4->Visible=false;Label5->Visible=false; Button1->Visible=false; Edit1->Visible=false; Label2->Visible=false; Image2->Picture->LoadFromFile("1.bmp"); Button4->Visible=true; Button6->Visible=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button4Click(TObject *Sender) { Label6->Caption = ""; Label7->Caption = ""; // початок вбудованого методу long double mas_v_m[100000]; randomize(); Memo1->Clear(); int N = StrToInt(CSpinEdit1->Text); for(int i=0; i<N; ) { mas_v_m[i]= random(1000); if( mas_v_m[i]!=0) { mas_v_m[i]=mas_v_m[i]/1000; Image2->Canvas->Pixels[floor(mas_v_m[i-1]*100)][floor(mas_v_m[i]*100)]=clRed; if(CheckBox1->Checked) Memo1->Text = Memo1->Text + FloatToStrF(mas_v_m[i],ffFixed,6,4)+" "; i++; } } //кінець int m[21]; //обнулення масиву for(int i=0;i<20;i++) m[i]=0; float tmp=1/10; for( int i=0;i<N;i++) for(int j=1;j<=20;j++) { if(mas_v_m[i]<=0.05*j) {m[j-1]=m[j-1]+1; break; } } //Build graph with help TChart for(int i=0;i<20;i+=1) { Series1->Add((m[i]),IntToStr(i),clRed); } Image2->Width=100; Image2->Height=100; //стохастичність double hi2 = 0; int d = 5; double mas1[10]; double p[10]; double cnt = 0; int a = 0; double dl = 1.0 / d; for (double j = 0; j < 1; j += dl) { cnt = 0; for (int i = 0; i < N; i++) { if (mas_v_m[i] > j && mas_v_m[i] <= (j + dl)) cnt++; } mas1[a] = cnt; p[a] = mas1[a] / N; a++; } for (int i = 0; i < d; i++) if (p[i] != 0) hi2 = hi2 + pow((mas1[i] - N * p[i]), 2) / (N * p[i]); //кореляція double hia2 = 0.352; if (hi2 >= hia2) Label6->Caption = "Гіпотеза не вірна"; else Label6->Caption = Label6->Caption + "Гіпотеза вірна зі імовірністю 95"; Label6->Caption = Label6->Caption + " "+" Критерій Х2=" +FloatToStr(hi2); double SXi = 0, SXit = 0, SXiXit = 0, SXi2 = 0, SXit2 = 0; int t=0; for (int i = 0; i < N - t; i++) { SXi += mas_v_m[i]; SXit += mas_v_m[i + t]; SXiXit += mas_v_m[i] * mas_v_m[i + t]; SXi2 += mas_v_m[i] * mas_v_m[i]; SXit2 += mas_v_m[i + t] * mas_v_m[i + t]; } double DXi, DXit; DXi = 1.0 / (N - t) * SXi2 - 1.0 / ((N - t) * (N - t)) * SXi * SXi; DXit = 1.0 / (N - t) * SXit2 - 1.0 / ((N - t) * (N - t)) * SXit * SXit; double Pt; Pt = (1.0 / (N - t) * SXiXit - (1.0) / ((N - t) * (N - t)) * SXi * SXit) / sqrt(DXi * DXit); //Label7->Caption = FloatToStr(Pt); double B; B=1- (abs(Pt)*sqrt(1.0/N)); if ((Pt >=0) && (Pt <=1)) Label7->Caption = "Послідовність незалежна з імовірністю " +FloatToStrF(B,ffFixed,4,4) ; else Label7->Caption = "Послідовність залежна з імовірністю "+FloatToStr(Pt) ; } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp");Button6->Visible=false; Button4->Visible=false; Button1->Visible=true; Edit2->Visible=false;Edit3->Visible=false; Label4->Visible=false;Label5->Visible=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Button6->Visible=false; Button4->Visible=false; Edit2->Visible=false;Edit3->Visible=false; Label4->Visible=false;Label5->Visible=false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button5Click(TObject *Sender) { Series1->Clear(); Edit2->Visible=true;Edit3->Visible=true; Label4->Visible=true;Label5->Visible=true; Button6->Visible=true; Button1->Visible=false; Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit3Change(TObject *Sender) { Series1->Clear(); Image2->Picture->LoadFromFile("1.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button6Click(TObject *Sender) { Memo1->Clear(); Label6->Caption=""; Label7->Caption=""; double L=StrToInt(Edit3->Text); double N=StrToInt(CSpinEdit1->Text); double Xi; double M =pow(10, 9); Xi=StrToInt(Edit2->Text); long double mas_m_m[100000]; for (int i = 0; i < N; i++) { Xi = fmod((Xi * L),M); mas_m_m[i]= Xi/M; if(CheckBox1->Checked) Memo1->Text = Memo1->Text + FloatToStrF((float) mas_m_m[i],ffFixed,4,4)+" "; Image2->Canvas->Pixels[floor(mas_m_m[i-1]*100)][floor(mas_m_m[i]*100)]=clRed; } int m[21]; //обнулення масиву for(int i=0;i<20;i++) m[i]=0; for( int i=0;i<N;i++) for(int j=1;j<=20;j++) { if(mas_m_m[i]<=0.05*j) {m[j-1]=m[j-1]+1; break; } } //Build graph with help TChart for(int i=0;i<20;i+=1) { Series1->Add((m[i]),IntToStr(i),clRed); } Image2->Width=100; Image2->Height=100; //стохастичність double hi2 = 0; int d = 5; double mas1[10]; double p[10]; double cnt = 0; int a = 0; double dl = 1.0 / d; for (double j = 0; j < 1; j += dl) { cnt = 0; for (int i = 0; i < N; i++) { if (mas_m_m[i] > j && mas_m_m[i] <= (j + dl)) cnt++; } mas1[a] = cnt; p[a] = mas1[a] / N; a++; } for (int i = 0; i < d; i++) if (p[i] != 0) hi2 = hi2 + pow((mas1[i] - N * p[i]), 2) / (N * p[i]); double hia2 = 0.352; if (hi2 >= hia2) Label6->Caption = "Гіпотеза не вірна"; else Label6->Caption = Label6->Caption+" "+ "Гіпотеза вірна зі імовірністю 95"; Label6->Caption = Label6->Caption + " "+" Критерій Х2=" +FloatToStr(hi2); double SXi = 0, SXit = 0, SXiXit = 0, SXi2 = 0, SXit2 = 0; int t=0; for (int i = 0; i < N - t; i++) { SXi += mas_m_m[i]; SXit += mas_m_m[i + t]; SXiXit += mas_m_m[i] * mas_m_m[i + t]; SXi2 += mas_m_m[i] * mas_m_m[i]; SXit2 += mas_m_m[i + t] * mas_m_m[i + t]; } double DXi, DXit; DXi = 1.0 / (N - t) * SXi2 - 1.0 / ((N - t) * (N - t)) * SXi * SXi; DXit = 1.0 / (N - t) * SXit2 - 1.0 / ((N - t) * (N - t)) * SXit * SXit; double Pt; Pt = (1.0 / (N - t) * SXiXit - (1.0) / ((N - t) * (N - t)) * SXi * SXit) / sqrt(DXi * DXit); //Label7->Caption = FloatToStr(Pt); double B; B=1- (abs(Pt)*sqrt(1.0/N)); if ((Pt >=0) && (Pt <=1)) Label7->Caption = "Послідовність незалежна з імовірністю " +FloatToStrF(B,ffFixed,4,4) ; else Label7->Caption = "Послідовність залежна з імовірністю "+FloatToStr(Pt) ; } //--------------------------------------------------------------------------- Протокол роботи програми: Серединних квадратів:  Вбудований метод:  Мультиплікативний метод:  Висновок: в даній роботі я навчився одержувати послідовності псевдовіпадковіх квазірівномірно розподілених чисел запропонованими методами та перевірка їх на рівномірність за допомогою гістограми та за непрямими ознаками.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!