Разработка программы для статистических расчетов
Оценка неизвестной функции распределения величины или ее плотности распределения вероятности. Алгоритм основной программы, функции для построения графика исходного массива, гистограммы и графика функции Лапласа. Результат обработки сейсмического сигнала.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.12.2012 |
Размер файла | 194,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
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)
Вероятность попадания случайной величины в элементарный интервал x определится
P (x X x +x) = F (x +x) - F(x). (2)
Разделим обе части равенства на x и найдем предел при x 0
.
Эта функция есть плотность распределения вероятности или дифференциальный закон распределения (рисунок 1). Функция распределения вероятности через плотность распределения вероятности может быть выражена следующим образом
. (3)
Оценкой плотности распределения вероятности является гистограмма частости.
Рисунок 1
Для ее построения необходимо выполнить следующие действия:
1) центрировать значения случайной величины. Центрированной случайной величиной называется разность между значениями случайной величины и ее математическим ожиданием;
2) упорядочить данные в порядке возрастания значений случайной величины;
определить длину интервала по формуле Стерджеса
, (4)
где n - общее количество реализаций случайной величины;
4) область изменения случайной величины разбить на 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;
6) на каждом интервале определить частость mi/n;
7) построить гистограмму (рисунок 2). Соединив середины прямоугольников, получим кривую, близкую к функции f(x).
Вторая задача математической статистики - это оценка неизвестных параметров.
В этой задаче на основании физических или общетехнических соображений выдвигается гипотеза, что случайная величина X имеет функцию распределения определенного вида, зависящую от нескольких параметров, значения которых неизвестны. По результатам наблюдения случайной величины X нужно оценить значения этих параметров.
Основными параметрами являются моменты первого и второго порядка - это математическое ожидание и дисперсия. Их оценками являются среднее арифметическое и выборочная дисперсия, которые вычисляются по выражениям:
, (7)
. (8)
Третья задача - статистическая проверка гипотез. Задача формулируется следующим образом.
Пусть на основании некоторых соображений можно считать, что функция распределения исследуемой случайной величины X есть F1(x). Данное предположение называется нулевой гипотезой и обозначается H0. Как правило, нулевая гипотеза - это предположение о том, что реальный закон распределения не отличается от теоретического. Противоположная гипотеза (есть различия) называется альтернативной и обозначается через H1.
Если на случайную величину оказывает воздействие пять и более случайных факторов, то закон распределения можно считать нормальным. Для проверки гипотезы о нормальном законе распределения можно воспользоваться критерием Пирсона .
Методика проверки гипотезы заключается в следующем:
1) весь диапазон изменения случайной величины X разбивают на k интервалов и в каждом из них находят частоты mk (см. п.п. 1…5 в первой задаче);
2) оценить среднее арифметическое и выборочную дисперсию (см. вторую задачу);
3) если частоты на крайних интервалах меньше пяти, то интервалы можно объединить в один до mi = 5…7 (согласно рекомендациям К. Кокрена;
в каждом интервале вычислить функцию Лапласа
, (9)
где ; yi - значение случайной величины в середине i-го интервала. Значения функции Ф(ti) можно найти по таблице 1 [1];
5) определить теоретическую частоту в каждом интервале:
, (10)
6) вычислить расчетную статистику :
. (11)
7) теоретическое значение найти по таблице 7 [1] для степеней свободы и уровня значимости . Параметр определяется по формуле = k - b - 1, где b - количество параметров, оцениваемых по выборке (b = 2). Для статистически незначимых задач = 0,5;
8) если , то гипотеза о нормальном законе распределения принимается. Говорят, что нулевая гипотеза принимается на уровне значимости 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) // Проверка на наличие ошибки
{
printf («Ошибка:%s \n», grapherrormsg(errorcode));
printf («Для останова нажмите любую клавишу \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++)
{
setcolor(5); // .
line (y1, (115-V [i-1]*0.5), y2, (115-V[i]*0.5)); // Построение графика
y1=y2;
y2+=3; // Смещение координат по горизонтальной оси
}
}
// Функция для построения гистограммы и графика функции Лапласа
void gistfun (float m[], float F[], int k)
{
y1=23;
y2=43;
setcolor(7);
setviewport (20,236,630,470,1);
rectangle (1,1,610,225);
for (i=1; i<=k; i++)
{
setfillstyle (1,5); // Задание типа и цвета заполнения
bar (y1,115, y2, (115-m[i]*50)); /*Построение гистограммы в соответствии с масштабом*/
setcolor(RED);
rectangle (y1,115, y2, (115-m[i]*50));
setcolor(GREEN);
if (i!=k)
line (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],
F[MAX], fn[MAX], x, xn;
// Приём сигнала.
FILE *fptr; // Инициализация файловой переменной
fptr=fopen («D:\\B1B015.TXT», «rt»); // Открытие файла, содержащего сигнал
if (fptr==NULL) // Проверка
{
printf («Ошибка \n»);
getch();
exit(1); //
}
for (i=0; i<COL; i++)
{
fscanf (fptr, «%f»,&V[i]);
sum+=V[i];
}
fclose(fptr); // Закрытие файла
/*Расчёт математического ожидания, дисперсии и среднеквадратического отклонения*/
ojid=sum/COL; // Определение математического ожидания
printf («\n»);
printf («Математическое ожидание =%f \n», ojid);
for (i=0; i<COL; i++)
dis+=(V[i] - ojid)*(V[i] - ojid);
dis/=COL-1; // Дисперсия
otkl=sqrt(dis); // Отклонение
printf («Дисперсия =%f \n», dis);
printf («Среднеквадратическое отклонение =%f \n», otkl);
// Расчёт функции Лапласа
for (i=0; i<COL; i++)
VC[i]=V[i] - ojid; // Центрирование
for (i=0; i<COL; i++) // Сортировка методом выбора
for (j=i+1; j<COL; j++)
if (VC[i]>VC[j])
{
pr=VC[i];
VC[i]=VC[j];
VC[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);
y2=y1+h;
for (i=1; i<=k; i++)
m[i]=0;
for (i=1; i<=k; i++) /*Частота попадания случайной величины в каждый интервал*/
{
for (j=0; j<COL; j++)
if((VC[j]>y1)&&(VC[j]<=y2))
m[i]+=VC[j];
y1=y2;
y2+=h;
}
y1=VC[0] - h/2;
x=0;
for (i=1; i<=k; i++)
{
m[i]=m[i]/COL; // Частость на данном интервале
t[i]=(y1+h/2-ojid)/dis;
y1+=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 («Гипотеза не принимается. Ищите ошибку.»);
printf («\n»);
getch();
// Построение графиков
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++)
fprintf (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, «Гипотеза не принимается. Ищите ошибку.»);
fclose(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 - Результаты выполнения программы
Выводы
В процессе выполнения программы, предназначенной для статистических расчетов, выявлено, что гипотеза о нормальном распределении случайной величины принимается, а дисперсия, математическое ожидание и среднеквадратическое отклонение имеют следующие значения соответственно:
1023.460449
-0.226562
31.991568
Были построены графики исходного сигнала и функции Лапласа, а также гистограмма распределения случайной величины.
Список литературы
1. Вентцель Е.С. Теория вероятностей. - М.: Наука, 1969.
2. Основы языка С в примерах: учеб. пособие / Акимова Ю.С., Чистова Г.К., Механов В.Б. - Пенза: Изд-во Пенз. гос. ун-та, 2010. - 80 с.
Размещено на Allbest.ru
Подобные документы
Понятие машинного и реального времени, дискретизация времени. Реализация временных задержек в программе. Вычисление значения многочлена методом Горнера. Разработка схем алгоритмов, основной программы и подпрограмм. Построение графика временной функции.
курсовая работа [40,7 K], добавлен 18.04.2012Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).
курсовая работа [55,1 K], добавлен 21.11.2012Характеристика и описание массива структур из 3-х элементов. Блок-схемы главной функции main и текст программы на языке Си. Построение графика изменения напряженности поля заряженной частицы. Таблица символических имен, работоспособность программы.
курсовая работа [365,8 K], добавлен 02.02.2010График функции плотности распределения Парето. Алгоритм обработки выборки. Построение гистограммы относительных частот. Программа для автоматизации обработки, в которую заложены алгоритмы обработки выборки и возможность быстрого получения результата.
курсовая работа [1,3 M], добавлен 19.03.2012Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Выбор и обоснование методов расчета. Разработка основной программы. Блок-схемы алгоритмов. Распечатка листинга.
курсовая работа [1,5 M], добавлен 21.11.2013Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.
реферат [154,8 K], добавлен 15.03.2012Построение схемы алгоритма и программы для создания графика временной функции, работающей в машинном и реальном времени. Выбор методов решения и их обоснование. Значение коэффициентов и временной функции. Реализация временных задержек в программе.
курсовая работа [6,2 M], добавлен 09.03.2012Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Пример вычисления степенного ряда с помощью схемы Горнера. Описание переменных программы, листинг, процедуры и функции.
курсовая работа [67,6 K], добавлен 20.11.2012Написание программы для вычисления функции f(x), изображенной на графике, используя оператор if. Построение графика функции. Составление программы, вычисляющей сумму 101 из последовательно расположенных нечетных чисел. Нахождение корней системы уравнений.
контрольная работа [694,4 K], добавлен 07.08.2013Литературный обзор методов распознавания кромок для схожих задач. Объекты в приложении и их отображение. Генерация выходных данных. Алгоритм распознавания линии (графика), отличный от градиентных подходов и использующий алгоритм предварительной обработки.
дипломная работа [711,8 K], добавлен 27.04.2014