Задача: Разыграть 200 случайных величин XI^2 распределения с параметром n =10(число степеней свободы)
Внешний вид программы:
Реализация:
public int GammaFunc(int k)
{
int result = 1;
for (int i=1;i<=k-1;i++)
{
result *= i;
}
return result;
}
private void button1_Click(object sender, EventArgs e)
{
int[] n = new int[20];
int m = 10;
Random r = new Random();
int count = 200;
double[] teta = new double[count];
double proizvedenie=1;
for (int i=0;i<count;i++)
{
for (int j=0;j<m*0.5;j++)
{
if (j==0) {proizvedenie = r.NextDouble();}
proizvedenie*=r.NextDouble();
}
teta[i] = -2 * Math.Log(proizvedenie,Math.E);
richTextBox1.Text += Convert.ToString(teta[i]) + "\n";
}
double[] plotnost_chi_square = new double[count];
for (int i=0;i<count;i++)
{
plotnost_chi_square[i] = Math.Pow((0.5), 0.5 * m) / GammaFunc(m/2) * Math.Pow(teta[i], 4) * Math.Pow(Math.E, -teta[i] * 0.5);
richTextBox2.Text += Convert.ToString(plotnost_chi_square[i]) + "\n";
chart1.Series[0].Points.AddXY(teta[i], plotnost_chi_square[i]);
}
for (int i=0;i<count;i++)
{
if (teta[i] > 0 && teta[i] < 1) n[0]++;
if (teta[i] > 1 && teta[i] < 2) n[1]++;
if (teta[i] > 2 && teta[i] < 3) n[2]++;
if (teta[i] > 3 && teta[i] < 4) n[3]++;
if (teta[i] > 4 && teta[i] < 5) n[4]++;
if (teta[i] > 5 && teta[i] < 6) n[5]++;
if (teta[i] > 6 && teta[i] < 7) n[6]++;
if (teta[i] > 7 && teta[i] < 8) n[7]++;
if (teta[i] > 8 && teta[i] < 9) n[8]++;
if (teta[i] > 9 && teta[i] < 10) n[9]++;
if (teta[i] > 10 && teta[i] < 11) n[10]++;
if (teta[i] > 11 && teta[i] < 12) n[11]++;
if (teta[i] > 12 && teta[i] < 13) n[12]++;
if (teta[i] > 13 && teta[i] < 14) n[13]++;
if (teta[i] > 14 && teta[i] < 15) n[14]++;
if (teta[i] > 15 && teta[i] < 16) n[15]++;
if (teta[i] > 16 && teta[i] < 17) n[16]++;
if (teta[i] > 17 && teta[i] < 18) n[17]++;
if (teta[i] > 18 && teta[i] < 19) n[18]++;
if (teta[i] > 19 && teta[i] < 20) n[19]++;
}
chart2.Series[0].Points.AddXY(1, n[0]);
chart2.Series[0].Points.AddXY(2, n[1]);
chart2.Series[0].Points.AddXY(3, n[2]);
chart2.Series[0].Points.AddXY(4, n[3]);
chart2.Series[0].Points.AddXY(5, n[4]);
chart2.Series[0].Points.AddXY(6, n[5]);
chart2.Series[0].Points.AddXY(7, n[6]);
chart2.Series[0].Points.AddXY(8, n[7]);
chart2.Series[0].Points.AddXY(9, n[8]);
chart2.Series[0].Points.AddXY(10, n[9]);
chart2.Series[0].Points.AddXY(11, n[10]);
chart2.Series[0].Points.AddXY(12, n[11]);
chart2.Series[0].Points.AddXY(13, n[12]);
chart2.Series[0].Points.AddXY(14, n[13]);
chart2.Series[0].Points.AddXY(15, n[14]);
chart2.Series[0].Points.AddXY(16, n[15]);
chart2.Series[0].Points.AddXY(17, n[16]);
chart2.Series[0].Points.AddXY(18, n[17]);
chart2.Series[0].Points.AddXY(19, n[18]);
chart2.Series[0].Points.AddXY(20, n[19]);Комментарии к исходному коду:
1. Для начала введём гамма функцию (для моделирования распределения)
2. В теле программы идёт просчёт каждой случайной величины, согласно формуле (через г. ф.)
3. Далее необходимый интервал(от 0 до беск.) делится на единичные интервалы((0,1) (1,2) ..., (19,20))
4. Осуществляется проверка на принадлежность случайной величины к одному из данных интервалов
5. Непосредственно построение гистограммы (при наличии количества величин на каждый из интервалов)
6. Выведение гистограммы на график (chart1)

