DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

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

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

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

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

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

Про що ця робота

У звіті досліджено методи генерації псевдовипадкових чисел та перевірку їх якості. Реалізовано метод серединних квадратів, мультиплікативний метод та вбудовані функції.

У роботі розглядаються

  • Комп'ютерне моделювання
  • Псевдовипадкові числа
  • Статистичні методи
  • Гістограми
  • Кореляційний момент
  • Стохастичність

Зміст і розділи

  1. Мета роботи
  2. Завдання
  3. Код програми
  4. Метод серединних квадратів
  5. Вбудований метод
  6. Мультиплікативний метод
  7. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Викладач кафедри

Ключові поняття

псевдовипадкові числакомп'ютерне моделюванняметод серединних квадратівмультиплікативний методгістограмастохастичністькореляційний моменткритерій хі-квадратрівномірний розподіл

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА" Інститут КНІТ Кафедра ПЗ ЗВІТ До лабораторної роботи № 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) ; } //--------------------------------------------------------------------------- Протокол роботи програми: Серединних квадратів:  Вбудований метод:  Мультиплікативний метод:  Висновок: в даній роботі я навчився одержувати послідовності псевдовіпадковіх квазірівномірно розподілених чисел запропонованими методами та перевірка їх на рівномірність за допомогою гістограми та за непрямими ознаками.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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