Разработка программы для статистических расчетов
1. Описание
теоретической части
Математическая
статистика - это раздел математики,
посвященный установлению закономерностей случайных явлений или процессов на
основании обработки статистических данных - результатов наблюдений или
измерений.
Пусть некоторая случайная величина X (например, амплитуда сигнала A) задана значениями x0, x1,…, xn-1.
Первая задача заключается в оценке
неизвестной функции распределения F(x) величины X или ее плотности распределения вероятности f(x), если X - непрерывная случайная величина.
Непрерывной называется случайная величина, которая принимает любые значения
из некоторого конечного или бесконечного интервала.
Пусть случайная величина X принимает
значения x0, x2,…, xi,…, xn-1 (рисунок 1). Функция
распределения F(x) - это вероятность того, что случайная величина X примет значение меньше некоторого
фиксированного действительного числа xi (рисунок 1). Функция F(x) - это интегральный закон распределения.
Вероятность попадания случайной
величины в интервал [x1, x2] через функцию распределения можно выразить
P(x1 £ X £ x2) = F(x2) - F(x1). (1)
Вероятность попадания случайной
величины в элементарный интервал Dx определится
P (x £ X £ x +Dx) = F (x +Dx) -
F(x). (2)
Разделим обе части равенства на Dx и найдем предел при Dx ® 0
.
Эта функция есть
плотность распределения вероятности или дифференциальный закон распределения
(рисунок 1). Функция распределения вероятности через плотность распределения
вероятности может быть выражена следующим образом
. (3)
Оценкой плотности
распределения вероятности является гистограмма частости.
Рисунок 1
Для ее построения
необходимо выполнить следующие действия:
) центрировать значения
случайной величины. Центрированной случайной величиной называется разность
между значениями случайной величины и ее математическим ожиданием;
) упорядочить данные в
порядке возрастания значений случайной величины;
3
определить длину интервала по формуле Стерджеса
, (4)
где n - общее количество реализаций случайной величины;
) область изменения
случайной величины разбить на k
интервалов. Начало первого и конец последнего вычисляются по формулам:
y1
= xmin - h/2, y2 = xmax + h. (5)
5) на каждом участке
определить частоту mi
попадания случайной величины X
в интервал i = 1,…, k.
Частота mi находится как
Рисунок 2
сумма значений случайной величины X, удовлетворяющих условию
yL < xj £ yR (6)
где yL и yR - левая и правая
границы i-го интервала; j = 1,… n;
) на каждом интервале определить
частость mi/n;
) построить гистограмму (рисунок 2).
Соединив середины прямоугольников, получим кривую, близкую к функции f(x).
Вторая задача математической
статистики - это оценка неизвестных параметров.
В этой задаче на основании
физических или общетехнических соображений выдвигается гипотеза, что случайная
величина X имеет функцию распределения определенного вида, зависящую от
нескольких параметров, значения которых неизвестны. По результатам наблюдения
случайной величины X нужно оценить значения этих параметров.
Основными параметрами являются
моменты первого и второго порядка - это математическое ожидание и дисперсия. Их
оценками являются среднее арифметическое и выборочная дисперсия, которые
вычисляются по выражениям:
, (7)
. (8)
Третья задача -
статистическая проверка гипотез. Задача формулируется следующим образом.
Пусть на основании
некоторых соображений можно считать, что функция распределения исследуемой
случайной величины X есть F1(x). Данное предположение называется нулевой гипотезой и
обозначается H0. Как правило, нулевая гипотеза - это предположение о том, что
реальный закон распределения не отличается от теоретического. Противоположная
гипотеза (есть различия) называется альтернативной и обозначается через H1.
Если на случайную
величину оказывает воздействие пять и более случайных факторов, то закон
распределения можно считать нормальным. Для проверки гипотезы о нормальном
законе распределения можно воспользоваться критерием Пирсона .
Методика проверки
гипотезы заключается в следующем:
) весь диапазон
изменения случайной величины X
разбивают на k интервалов и в каждом из них находят частоты mk (см. п.п. 1…5 в первой задаче);
) оценить среднее
арифметическое и выборочную дисперсию (см. вторую задачу);
) если частоты на
крайних интервалах меньше пяти, то интервалы можно объединить в один до mi = 5…7 (согласно рекомендациям К.
Кокрена;
4
в каждом интервале вычислить функцию Лапласа
, (9)
где ;
yi - значение случайной величины в
середине i-го интервала. Значения функции Ф(ti)
можно найти по таблице 1 [1];
) определить
теоретическую частоту в каждом интервале:
, (10)
) вычислить расчетную
статистику :
. (11)
7) теоретическое
значение найти
по таблице 7 [1] для n степеней свободы и уровня значимости a.
Параметр n
определяется по формуле n = k - b - 1, где b
- количество параметров, оцениваемых по выборке (b
= 2). Для статистически незначимых задач a = 0,5;
) если ,
то гипотеза о нормальном законе распределения принимается. Говорят, что нулевая
гипотеза принимается на уровне значимости 5%.
2. Алгоритм основной
программы
3. Алгоритмы функций
3.1 Алгоритм функции для
построения графика исходного массива
3.2 Алгоритм функции для
построения гистограммы и графика функции Лапласа
4. Текст программы
// Программа для статистических
расчетов
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <graphics.h>
// Задание констант.
#define COL 256
#define MAX 50
// Инициализация глобальных
переменных
int i, y1, y2;
void initgr(void) // Тип и имя функции
{
int gdriver=DETECT, gmode, errorcode; /*Задание необходимых переменных*/
initgraph (&gdriver, &gmode, «D:\\»); /*Установка видеоадаптера в графический режим*/
errorcode=graphresult(); /*Возращение кода ошибки и присвоение его переменной errorcode*/
if (errorcode!= grOk) // Проверка на наличие ошибки
{(«Ошибка:%s \n»,
grapherrormsg(errorcode)); («Для останова
нажмите любую клавишу \n»);
getch();
exit(1);
}
}
// Функция построения графика
исходного массива
void graphmas (float V[]) // Тип и имя функции и аргумента
{
y1=3;
y2=6; // Определение изначальных координат по горизонтальной оси
setcolor(7); // Задание цвета
setviewport (20,10,630,235,1); // Создание графического окна
rectangle (1,1,610,225); // Обозначение границ окна
line (1,115,610,115);
for (i=1; i<COL; i++)
{(5); // .(y1, (115-V
[i-1]*0.5), y2, (115-V[i]*0.5)); // Построение графика1=y2;
y2+=3; // Смещение координат по горизонтальной оси
}
}
// Функция для построения
гистограммы и графика функции Лапласа
void gistfun (float m[],
float F[], int k)
{=23;=43;(7);(20,236,630,470,1);(1,1,610,225); (i=1; i<=k; i++)
{
setfillstyle (1,5); // Задание типа и цвета заполнения
bar (y1,115, y2, (115-m[i]*50)); /*Построение гистограммы в соответствии с масштабом*/
setcolor(RED);(y1,115,
y2, (115-m[i]*50));(GREEN);(i!=k) (y1, (115-F[i]*50), y2, (115-F [i+1]*50)); /*Построение графика
функции Лапласа*/
y1=y2;
y2+=20;
}
}
void main(void) // Основная функция
{
clrscr();
// Инициализация необходимых
переменных
int j;
float ojid, V[COL],
sum=0, dis=0, otkl=0, VC[COL], pr, h, y1, y2, k, m[MAX], t[MAX],[MAX], fn[MAX],
x, xn;
// Приём сигнала.
FILE *fptr; // Инициализация файловой переменной
fptr=fopen («D:\\B1B015.TXT», «rt»); // Открытие файла, содержащего сигнал
if (fptr==NULL) // Проверка
{
printf («Ошибка \n»);
getch();(1); //
}(i=0; i<COL; i++)
{(fptr, «%f»,&V[i]);+=V[i];
}
fclose(fptr); // Закрытие файла
/*Расчёт математического ожидания,
дисперсии и среднеквадратического отклонения*/
ojid=sum/COL; // Определение математического ожидания
printf («\n»);
printf («Математическое ожидание =%f \n», ojid);
for (i=0; i<COL;
i++)+=(V[i] - ojid)*(V[i] - ojid);/=COL-1; // Дисперсия=sqrt(dis); // Отклонение(«Дисперсия =%f \n», dis);
(«Среднеквадратическое отклонение =%f \n», otkl);
// Расчёт функции Лапласа(i=0; i<COL;
i++)[i]=V[i] - ojid; // Центрирование
for (i=0; i<COL; i++) // Сортировка методом выбора
for (j=i+1; j<COL;
j++)(VC[i]>VC[j])
{=VC[i];[i]=VC[j];[j]=pr;
}
h=(VC[255] - VC[0])/(1+3.322*log(COL)); /*Определение длины интервала по формуле Стерджеса*/
y1=VC[0] - h/2; // Начало первого интервала
y2=VC[255]+h; // Конец последнего
k=(y2-y1)/h; // Количество интервалов
k=int(k);=y1+h;(i=1;
i<=k; i++)[i]=0;
for (i=1; i<=k; i++) /*Частота попадания случайной величины в каждый интервал*/
{(j=0; j<COL;
j++)((VC[j]>y1)&&(VC[j]<=y2))[i]+=VC[j];=y2;+=h;
for (i=1; i<=k; i++)
{
m[i]=m[i]/COL; // Частость на данном интервале
t[i]=(y1+h/2-ojid)/dis;1+=h;
F[i]=exp (-t[i]*t[i]/2)/sqrt (6.28); // Функция Лапласа для текущего интервала
fn[i]=F[i]*h*COL/dis; // Теоретическая частота текущего интервала
x+=(m[i] - fn[i])*(m[i]
- fn[i])/fn[i]; // Критерий Пирсона
}
xn=35.5; // Табличное значение расчётной статистики
xn*=xn;
printf («\n»);
// Проверка гипотезы о нормальном
распределении случайной величины
if (x<=xn)
printf («Нулевая гипотеза принимается на уровне значимости 5%.»);
else printf («Гипотеза не принимается. Ищите
ошибку.»);(«\n»);();
// Построение графиков
initgr(); // Функция инициализации графического режима
graphmas(V); // Построение графика исходного массива
gistfun (m, F, k); // Гистограмма и функция Лапласа
getch();
closegraph(); // Закрытие графического режима
// Запись исходных данных и
результатов расчётов в текстовый файл
fptr=fopen («D:\\kurs\rin.txt», «w+t»); /*Создание файла для записи по указанному адресу*/
if (fptr==NULL) // Проверка
{
printf («Ошибка \n»);
getch();
exit(1);
}
fprintf (fptr, «Исходные данные:\n»);
for (i=0; i<COL; i++) (fptr, «%f \n», V[i]); // Запись элементов массива
fprintf (fptr, «Математическое ожидание =%f \n», ojid); /*Запись
математического ожидания*/
fprintf (fptr, «Дисперсия =%f \n», dis); // Запись дисперсии
fprintf (fptr, «Среднеквадратическое отклонение =%f \n», otkl); /*Запись отклонения*/
if (x<=xn) // Запись результатов проверки гипотезы.
fprintf (fptr, «Нулевая гипотеза принимается на уровне значимости 5%.»);
else fprintf (fptr, «Гипотеза не принимается. Ищите ошибку.»);(fptr); // Закрытие
файла.
}
5. Описание программы
При разработке программы
использованы возможности стандартных библиотек stdio.h, stdlib.h, math.h, conio.h, graphics.h.
Далее производится описание констант
и глобальных переменных.
Подпрограммы, в которых выполняются
инициализация графического режима и построение всех необходимых графиков,
оформлены в виде функций.
В теле основной функции описываются
локальные переменные, принимается сигнал из файла и по формулам математической
статистики проводятся вычисления дисперсии, математического ожидания,
среднеквадратического отклонения и коэффициента Пирсона.
С помощью условного оператора if сравниваются расчётные
и табличные значения коэффициента Пирсона и делается вывод относительно
гипотезы о нормальном распределении случайной величины.
Центрирование сигнала производиться
в цикле for, для сортировки по возрастанию используется вложенный цикл. На
основе сортированного центрированного сигнала рассчитывается шаг по формуле
Стерджиса, начало первого и конец последнего интервалов, а также их количество.
С использованием циклов
рассчитывается частота попадания случайной величины в интервал m[i], частость m[i]/COL и функция Лапласа Ф[i].
Графики строятся введением
соответствующих функций.
В конце производится запись в
текстовый файл исходного сигнала столбиком и результатов расчётов дисперсии,
ожидания, отклонения и проверки гипотезы о нормальном распределении случайной
величины.
6. Результаты выполнения
программы
вероятность алгоритм сейсмический
программа
В результаты выполнения программы по
обработке сейсмического сигнала, приведенного на рисунке 3, были получены
следующие результаты (рисунок 4).
Рисунок 3 - График принимаемого
сейсмического сигнала
Рисунок 4 - Результаты выполнения
программы
Выводы
В процессе выполнения программы,
предназначенной для статистических расчетов, выявлено, что гипотеза о
нормальном распределении случайной величины принимается, а дисперсия,
математическое ожидание и среднеквадратическое отклонение имеют следующие
значения соответственно:
.460449
.226562
.991568
Были построены графики исходного
сигнала и функции Лапласа, а также гистограмма распределения случайной
величины.
Список литературы
1. Вентцель Е.С. Теория вероятностей. - М.: Наука, 1969.
. Основы языка С в примерах: учеб. пособие / Акимова Ю.С., Чистова
Г.К., Механов В.Б. - Пенза: Изд-во Пенз. гос. ун-та, 2010. - 80 с.