Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2014, 00:37   #1
Lissy15
Новичок
Джуниор
 
Регистрация: 19.05.2014
Сообщений: 2
По умолчанию моделирование непрерывных случайных величин

помогите пожалуйста)

смоделировать непрерывную случайную величину ξ методом обратных функций и методом отбора.
Сравнить эффективности методов по времени моделирования. Оценить математическое ожидание, дисперсию. Построить гистограмму плотности распределения, сравнить по критерию хи квадрат эмпирическое и теоретическое распределения.

Параметр А необходимо задавать в исходных данных, С-вычислять.

ξ~f(x)=C*(1+x)^(-2)
ξ~f(x)=C*sin(x)*cos(x)^2 где x принадлежит (0, А)

Для меня это очень сложно (начинающий). не получается. С чего начать не понимаю
Lissy15 вне форума Ответить с цитированием
Старый 19.05.2014, 00:42   #2
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Курсовая работа?
Artsiom вне форума Ответить с цитированием
Старый 19.05.2014, 00:44   #3
Lissy15
Новичок
Джуниор
 
Регистрация: 19.05.2014
Сообщений: 2
По умолчанию

нет, лабораторная работа(
Код:
#include <stdio.h>
#include <fstream>
#include <iostream>
#include "time.h"
#include "math.h"
#include <iomanip>
#include <conio.h>

using namespace std;

ofstream fout;

double getx0()
	{
	 double t=time(NULL);
	 while (t>=1)
		 t=t/10;
	 return t;
	}
double gist(int i, double k, double A)
{
	return (1/log(A+1)*log(((double)i/k+1)/((double)(i-1)/k+1)));
}
void rnd(double*x,int n)
{	
	 int M=11235, a=17, b=5;
	 x[0] = getx0();
	 for (int i=1; i<=a; i++)
	 x[i]=fmod(M*x[i-1]*10,10.0)/10.0;
	 for (int i=a+1; i<n; i++)
	 {if (x[i-a]>=x[i-b]) x[i]=x[i-a]-x[i-b];
	  else x[i]=x[i-a]-x[i-b]+1.0;
	 };
}

void qs(double* s_arr, int first, int last)
{
    int i = first, j = last;
    double  x = s_arr[(first + last) / 2];
    do {
        while (s_arr[i] < x) i++;
        while (s_arr[j] > x) j--;
 
        if(i <= j) {
            if (i < j) swap(s_arr[i], s_arr[j]);
            i++;
            j--;
        }
    } while (i <= j);
 
    if (i < last)
        qs(s_arr, i, last);
    if (first < j)
        qs(s_arr, first,j);
}

void main()
	{srand(time(NULL));
	 clock_t t1,t2;
	 int n=1000000;
	 double A=1.0, M=0, MM=0, D=0, time=0, xit=0, k=10, p=0,hi=0;
	 double C=1/(log(A+1.0));
	 double *x=new double[n];
	 double *xi=new double[n];
	 //---------------------------------------------------
	 locale loc("rus_rus.866"); wcout.imbue(loc);
	 fout.imbue(loc);
	 fout.open("output.csv");
	 fout<<setiosflags(ios::fixed);
	 cout.setf(ios::left); 
     //----------------------------------------------------
	 rnd(x,n);
	 fout<<"x"<<";"<<"Pпр"<<";"<<"Pт"<<endl;
	 t1=clock();
	 for (int i=1; i<n; i++)
		{ xi[i]=pow((A+1.0),x[i])-1.0;
		   M+=xi[i];
		   MM+=xi[i]*xi[i];
		 };
	 t2=clock();
	 M=M/n;
	 D=MM/n-M*M;
	 time=(double)(t2-t1)/CLOCKS_PER_SEC;
	 qs(xi,0,n);
	 int h=1;
	 for (int i=1; i<=k; i++)
		{p=0;
		 while (xi[h]<=(double)i/k && h<n)  {h++;p++;};
		 double gist1=gist(i,k,A);
		 fout<<(double)i/k<<";"<<p/n<<";"<<gist1<<endl;
		 hi+=pow((p/n-gist1),2)/gist1;
	    };

	 cout << setprecision(15)<<"M="<< M << endl << "D=" << D << endl << "hi=" << hi << endl << "time = " << time << endl <<endl<<endl;
	  cout<< "    ";
	/*  for(int i=0; i<8; i++)
		  cout<< i+1 << "        ";
	  cout<<endl<<endl;*/
	/*  fout<<"x"<<";"<<"Pпр"<<";"<<"Pт"<<endl;
	  for(int i=0; i<8; i++)
		  fout <<i+1<<";"<< pr[i]/n <<";"<<pt[i]<<endl ;*/
	/*  cout<<endl<<endl;
	  for(int i=0; i<8; i++)
		  cout << setprecision(5)<< p[i] <<"  " ;*/

	 fout.close();
	 getchar();
	}

Последний раз редактировалось Stilet; 19.05.2014 в 10:17.
Lissy15 вне форума Ответить с цитированием
Старый 19.05.2014, 02:33   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Lissy15, хоть объясните сначала без кода, что вы считаете. Может быть совсем не то..
f(x) - как я понял, это функция плотности распределения.
Чтобы методом обратных функций, надо найти функциию распределения (интегральную)
F(x)=интеграл от f(x)
А потом - функцию, обратную F(x).
И потом уже моделировать, используя стандартную функцию генерации равномерно распределенных случайных величин rand.

А что такое методом отбора - я не знаю.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моделирование случайных величи Romen1992 Помощь студентам 0 20.04.2014 12:53
Генерация случайных величин БалаШагаЛ Общие вопросы C/C++ 4 11.06.2013 02:44
генератор случайных величин Dane4ka Помощь студентам 6 13.04.2011 20:10
1) Моделирование полной группы случайных событий gfadssa11 Microsoft Office Excel 5 17.12.2010 00:34
Анализ генератора случайных величин 3bukvy Софт 16 15.09.2009 07:41