Создание программы для расчёта статистических характеристик случайной величины

Создание программы для расчёта статистических характеристик случайной величины

Добрый день! Я писал программу для расчёта статистических характеристик случайной величины. Нужно было сгенерировать последовательность случайных чисел для N элементов, разделить её на пять интервалов, рассчитать частоты для каждого интервала, рассчитать выборочное среднее, моду, медиану, дисперсию, среднеквадратическое отклонение, получить из элементов этой последовательности функцию плотности нормального распределения и построить графики. С графиками возникли проблемы. Во-первых, нужно было построить гистограмму для относительной частоты с диапазоном значений оси абсцисс от минимального до максимального элемента выборки, где длина между горизонтальными делениями равна длине интервалов h, на этих делениях обозначены концы каждого интервала, ширина столбцов упиралась в эти деления, а высота каждого столбца была равна относительной частоте интервала. Я пытался делать так:

А потом так:

Но выводились только один или два столбца вместо нужных мне пяти, а на границах этих столбцов по оси абсцисс не были размечены концы интервалов, к которым они принадлежат.

Во-вторых, нужно было построить график функции плотности нормального распределения, полученной из предыдущей последовательности, но я не знаю, какой вид графика выбрать: hist(f,N) или plot(f). В первом случае получается убывающий график, а во втором – какая-то ломанная вместо нужного мне «колокола».

Вы сможете указать, где ошибки в коде, и привести вариант их исправления? Как для первого графика определить шаг сетки по горизонтали (в данном случае от минимального к максимальному числу сгенерированной последовательности с длиной интервалов h, последовательность разделена на 5 равных интервалов), ширину (в данном случае равную шагу сетки и чтобы границы столбцов находились на горизонтальных делениях) и высоту (в данном случае равную относительной частоте интервалов) столбцов? Какой вид должен быть у второго графика – hist или plot и с какими параметрами?

Исходный код программы:

Matlab MВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

function static_characteristics(N)
n = ones(1,5); % частота
r = ones(1,5); % относительная частота
w = ones(1,5); % накопленная частота
S = 0;
X = rand(1,N); % создание массива случайных чисел из интервала (0; 1), имеющего N элементов
min = X(1);
max = X(1);
for i=1:N % поиск верхней и нижней границы диапазона случайных чисел
if (max < X(i))
max = X(i);
end
if (min > X(i))
min = X(i);
end
end % конец цикла
h = (max - min)/5; % определение длины интервалов
disp(['Нижняя граница диапазона равна ' num2str(min)]);
disp(['Верхняя граница диапазона равна ' num2str(max)]);
disp(['Длина каждого интервала равна ' num2str(h)]);
for k=1:5 % определение частот на интервалах
n(k) = 0;
for j=1:N % для первого интервала левый конец включается
if ((k == 1) && (X(j) >= min) && (X(j) <= (min + h)))
n(k) = n(k) + 1; % а для остальных не включается, чтобы случайно не посчитать
elseif ((X(j) > (min + h(k-1))) && (X(j) <= (min + hk)))
n(k) = n(k) + 1; % числа, принадлежащие предыдущему интервалу
end
end
S = S + n(k); % расчет относительной и накопленной частоты
r(k) = n(k)/N;
w(k) = S;
disp(['Интервал ' num2str(k) ' от ' num2str(min + h(k-1)) ' до ' num2str(min + hk)]);
disp(['Частота на интервале равна ' num2str(n(k))]);
disp(['Относительная частота равна ' num2str(r(k))]);
disp(['Накопленная частота равна ' num2str(w(k))]);
end % конец цикла
for a=1:5 % вычисление медианы
if (w(a) > (N/2))
x0 = min + h(a-1);
Me = x0 + ((h((N/2) - w(a-1)))/(n(a)));
end
end % конец цикла
disp(['Медиана равна ' num2str(Me)]);
x=mean(X); % расчет выборочного среднего
disp(['Выборочное среднее равно ' num2str(x)]);
delta = abs(Me - x);
disp(['Разница между медианой и средним значением составляет ' num2str(delta)]);
n_max = n(1);
numb = 1;
for m=1:5 % поиск максимальной частоты
if (n_max < n(m))
n_max = n(m);
numb = m;
end
end % конец цикла
x0 = min + h(numb-1); % вычисление моды
M0 = x0 + ((h(n(numb) - n(numb-1)))/((n(numb) - n(numb-1)) + (n(numb) - n(numb+1))));
disp(['Мода равна ' num2str(M0)]);
disp(['С наибольшей вероятностью значение случайной величины попадает в интервал ' num2str(numb) ' от ' num2str(min + h(numb-1)) ' до ' num2str(min + hnumb)]);
D = mean((X - x).^2); % вычисление дисперсии
disp(['Дисперсия равна ' num2str(D)]);
q = sqrt(D); % вычисление среднеквадратического отклонения
disp(['Среднеквадратическое отклонение равно ' num2str(q)]);
f = exp((X - x).^2/(2q^2))/(qsqrt(2pi)); % определение функции плотности нормального распределения
I = min:h:max; % определение пяти интервалов по их длине и крайним значениям
subplot(2,1,1);
hist(r,I); % построение гистаграммы для относительной частоты на заданных интервалах
title('Относительная частота');
subplot(2,1,2);
hist(f,N); % построение графика для плотности нормального распределения
title('Функция плотности нормального распределения');

Результаты:

Matlab MВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

>> static_characteristics(100);
Нижняя граница диапазона равна 0.024408
Верхняя граница диапазона равна 0.99627
Длина каждого интервала равна 0.19437
Интервал 1 от 0.024408 до 0.21878
Частота на интервале равна 22
Относительная частота равна 0.22
Накопленная частота равна 22
Интервал 2 от 0.21878 до 0.41315
Частота на интервале равна 25
Относительная частота равна 0.25
Накопленная частота равна 47
Интервал 3 от 0.41315 до 0.60752
Частота на интервале равна 17
Относительная частота равна 0.17
Накопленная частота равна 64
Интервал 4 от 0.60752 до 0.8019
Частота на интервале равна 14
Относительная частота равна 0.14
Накопленная частота равна 78
Интервал 5 от 0.8019 до 0.99627
Частота на интервале равна 22
Относительная частота равна 0.22
Накопленная частота равна 100
Медиана равна 0.55451
Выборочное среднее равно 0.47766
Разница между медианой и средним значением составляет 0.076852
Мода равна 0.27179
С наибольшей вероятностью значение случайной величины попадает в интервал 2 от 0.21878 до 0.41315
Дисперсия равна 0.084301
Среднеквадратическое отклонение равно 0.29035