Определение параметров регрессионной зависимости полной фактической себестоимости топлива и электроэнергии, расходуемой на технологические цели

Функции ввода-вывода строк и символов языка Си. Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у, коэффициента парной корреляции, регрессии двух функций, остаточных дисперсий. Расчет параметров регрессионных зависимостей.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.03.2016
Размер файла 421,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

Учреждение образования

«Гомельский государственный технический университет имени П.О. Сухого»

Факультет автоматизированных и информационных систем

Кафедра «Информационные технологии»

направление специальности 1-40 01 02-01 «Информационные системы и технологии в проектировании и производстве»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине «Основы алгоритмизации и программирования»

на тему: «Определение параметров регрессионной зависимости полной фактической себестоимости топлива и электроэнергии, расходуемой на технологические цели»

Исполнитель: студент гр. ИТ-12

Дедков Р.А.

Гомель 2015

Содержание

Введение

1. Теоретические сведения

1.1 Функции ввода-вывода строк и символов языка С+

1.2 Функции ввода информации

2. Постановка задачи и исходные данные

3. Графическая схема алгоритма

3.1 Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у

3.2 Вычисление коэффицента парной кораляции

3.3 Вычисление регресии для первой и второй функции

3.4 Вычисление остаточных дисперсий

4. Расчет параметров регрессионных зависимостей с помощью надстройки Пакет анализа MSExcel

4.1 Расчет параметров регрессионных зависимостей

4.2 График с исходными данными и регрессионными зависимостями

5. Описание функционирования программного комплекса

Заключение

Список использованных источников

Приложение А

Приложение Б

Введение

Регрессионный анализ -- метод моделирования измеряемых данных и исследования их свойств. Данные состоят из пар значений зависимой переменной (иначе называют регрессорами или предикторами) и независимой переменной (критериальной). Регрессионная модель есть функция независимой переменной и параметров с добавленной случайной переменной. Параметры модели настраиваются таким образом, что модель наилучшим образом приближает данные. Критерием качества приближения (целевой функцией) обычно является среднеквадратичная ошибка: сумма квадратов разности значений модели и зависимой переменной для всех значений независимой переменной в качестве аргумента.

Цели регрессионного анализа:

-определение степени детерминированности вариации критериальной (зависимой) переменной предикторами (независимыми переменными);

-предсказание значения зависимой переменной с помощью незаисимой;

-определение вклада отдельных независимых переменных в вариацию зависимой.

Регрессионный анализ служит для определения вида связи между двумя переменными и дает возможность для прогнозирования значения одной (зависимой) переменной отталкиваясь от значения другой (независимой) переменной.

Регрессионный анализ нельзя использовать для определения наличия связи между переменными, поскольку наличие такой связи и есть предпосылка для применения анализа.

В ходе регрессионного анализа решаются две основные задачи:

-построение уравнения регрессии, т.е. нахождение вида зависимости между результатным показателем и независимыми факторами x1, x2, ..., xn;

-оценка значимости полученного уравнения, т.е. определение того, насколько выбранные факторные признаки объясняют вариацию признака y.

При оценке модели рассчитывают показатели силы и тесноты связи. Для этого используют следующие показатели вариации результативного признака:

-факторная дисперсия, характеризующаяся вариацию результативного признака, объясняемую только признаком фактором;

-остаточная дисперсия, объясняющаяся влиянием прочих факторов на результативный признак;

-общая дисперсия, складывающаяся за счет влияния всех факторов;

-коэффициент детерминации -- отношение факторной дисперсии к общей, показывающий, какая часть общей вариации результативного признака объясняется признаком фактором.

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

Регрессия может быть представлена в виде суммы не случайной и случайной составляющих.

Регрессионные зависимости бывают однофакторные (парные) и многофакторные. Парная регрессия при парной зависимости может быть аппроксимирована прямой линией, параболой, гиперболой, логарифмической, степенной или показательной функцией, полиномом и др.

Двухфакторное поле можно аппроксимировать плоскостью, параболоидом второго порядка, гиперболоидом.

Применяется регрессионный анализ главным образом для планирования, а также для разработки нормативной базы.

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

Целью курсовой работы является получение навыков по алгоритмизации и программированию.

В процессе выполнения работы решаются следующие задачи:

-разработка алгоритма вычисления статистических характеристик по заданным формулам;

-запись алгоритма в виде блок-схемы и программы на языке Си;

-подготовка данных для отладки программы средствами табличного процессора MSExcel;

-изучение теоретических вопросов использования системы программирования.

1. Теоретические сведения

1.1 Функции ввода-вывода строк и символов языка С

В языке Си нет встроенных средств ввода/вывода данных. Ввод/вывод информации осуществляется с помощью библиотечных функций и объектов.

Декларации функций ввода/вывода, как уже упоминалось, приведены в заголовочном файле stdio.h.

Для вывода информации на экран монитора (дисплей) в языке Си чаще всего используются функции: printf() и puts().

Формат функции форматного вывода на экран:

printf( управляющая строка , список объектов вывода);

В управляющей строке, заключенной в кавычки, записывают: поясняющий текст, который выводится на экран без изменения (комментарии), список модификаторов форматов, указывающих компилятору способ вывода объектов (признак модификатора формата - символ %) и специальные символы, управляющие выводом (признак - символ \).

В списке объектов вывода указываются идентификаторы печатаемых объектов, разделенных запятыми: переменные, константы или выражения, вычисляемые перед выводом.

Количество и порядок следования форматов должен совпадать с количеством и порядком следования выводимых на экран объектов.

Функция printf выполняет вывод данных в соответствии с указанными форматами, поэтому формат может использоваться и для преобразования типов выводимых объектов.

Для чисел long добавляется символ l, например, %ld - длинное целое, %lf - число вещественное с удвоенной точностью - double.

Если нужно напечатать сам символ %, то его нужно указать 2 раза:

printf ("Только %d%% предприятий не работало. \n",5);

Получим: Только 5% предприятий не работало.

Управляют выводом специальные последовательности символов: \n - новая строка; \t - горизонтальная табуляция; \b - шаг назад; \r - возврат каретки; \v - вертикальная табуляция; \\ - обратная косая; \' - апостроф; \" - кавычки; \0 - нулевой символ (пусто).

Пример:

#define PI 3.14159

. . .

int number = 5;

float bat = 255;

int cost = 11000;

. . .

printf(" %d студентов съели %f бутербродов. \n", number, but);

printf(" Значение числа pi равно %f. \n", pi);

printf(" Стоимость этой вещи %d %s. \n", cost, "Руб.");

. . .

В модификаторах формата функции printf после символа % можно указывать число, задающее минимальную ширину поля вывода, например, %5d - для целых, %4.2f - для вещественных - две цифры после запятой для поля шириной 4 символа. Если указанных позиций для вывода целой части числа не хватает, то происходит автоматическое расширение.

Если после «%» указан знак «минус», то выводимое значение будет печататься с левой позиции поля вывода, заданной ширины, например: % - 10d.

Использование функции printf для преобразования данных:

1) printf("%d", 336.65); получим: 336;

2) printf("%o", 336); получим: 520, т.е. 5*8**2+2*8+0*1 = 336;

3) printf("%x", 336); получим: 150 (шестнадцатеричное).

Можно использовать функцию printf для нахождения кода ASCII некоторого символа:

printf (" %c - %d\n", 'a', 'a');

получим десятичный код ASCII символа а: a - 65 .

Функция puts(ID строки); выводит на экран дисплея строку символов, автоматически добавляя к ней символ перехода на начало новой строки (\n).

Аналогом такой функции будет: printf(“%s \n”, ID строки);

Функция putchar() выдает на экран дисплея один символ без добавления символа `\n'.

1.2 Функции ввода информации

Функция, предназначенная для форматированного ввода исходной информации с клавиатуры:

scanf (управляющая строка , список адресов объектов ввода);

в управляющей строке указываются только модификаторы форматов, количество и порядок следования которых должны совпадать с количеством и порядком следования вводимых объектов, а тип данных будет преобразовываться в соответствии с модификаторами.

Список объектов ввода представляет собой адреса переменных, разделенные запятыми, т.е. для ввода значения переменной перед ее идентификатором указывается символ &, обозначающий операцию «взять адрес».

Если нужно ввести значение строковой переменной, то использовать символ & не нужно, т.к. строка - это массив символов, а ID массива является адресом его первого элемента. Например:

int course;

double grant;

char name[20];

printf (" Укажите курс, стипендию, имя \n ");

scanf ("%d %lf %s", &course, &grant, name);

Вводить данные с клавиатуры можно как в одной строке через пробелы, так и в форме разных строк, нажимая после ввода текущего объекта клавишу Enter.

Функция scanf() использует практически тот же набор модификаторов форматов, что и printf(); отличия от функции вывода следующие: отсутствует формат %g, форматы %e,%f - эквивалентны. Для ввода коротких целых чисел введен модификатор формата %h.

Внимание. Функцией scanf() по формату %s строка вводится только до первого пробела.

Для ввода фраз, состоящих из слов, разделенных пробелами, используется функция gets (ID строковой переменной);

Символы вводятся при помощи функции getch(). Причем простой ее вызов организует паузу, при которой система программирования приостановит выполнение программы и будет ждать нажатия любой клавиши. Так поступают в том случае, когда нужно просмотреть какие-то результаты работы, при выводе их на экран монитора.

Если же использовать ее в правой части операции присваивания, например:

char c;

. . .

c = getch();

то символьная переменная с получит значение кода нажатой клавиши.

С началом работы любой программы автоматически открываются стандартные потоки для ввода (stdin) и вывода данных (stdout), которые по умолчанию связаны с клавиатурой и экраном монитора соответственно.

Ввод данных функциями gets(), getch() выполняется с использованием потока stdin. Если указанная функция не выполняет своих действий (проскакивает), перед использованием необходимо очистить поток (буфер) ввода с помощью функции fflush(stdin).

2. Постановка задачи и исходные данные

Исходными данными задачи являются:

1) набор значений фактора и набор значений результата , указанных в таблице 1.1 , где n - количество значений;

2) две функции и , которые будут использоваться как регрессионные зависимости;

3) указываются формулы, с помощью которых можно рассчитать значения параметров и таких, что зависимость наилучшим образом приближает исходные наборы фактора и результата , а также указываются аналогичные формулы для расчета параметров и ;

4) название функциональности системы программирования, описание которой требуется найти в литературе.

На основе указанных исходных данных требуется разработать алгоритм и представить его в виде блок-схемы и программы на языке Си, который для заданных наборов фактора и результата (таблица 1.1) рассчитывает следующие статистические характеристики:

1. средние значения этих наборов

, ;

2. дисперсии

, ;

3. среднеквадратические отклонения:

, ;

4. коэффициент парной корреляции:

;

В алгоритме должен быть предусмотрен анализ вычисленного значения парной корреляции r: если , то считают, что между фактором и результатом отсутствует функциональная зависимость, а при считают, что функциональная зависимость существует;

5. далее в алгоритме следует предусмотреть вычисление характеристик регрессионных зависимостей и . Для этого надо вычислить значения параметров , , и по формулам, указанным в задании (указанные формулы выведены из условия минимальности суммы квадратов отклонений значений и от в точках ). Все регрессионные зависимости имеют вид: . При этом, значения коэффициентов и вычисляются по следующим формулам:

6. вычислить значения результата по регрессионным зависимостям:

, ;

7. вычислить остаточные дисперсии:

, ;

8. вычислить коэффициенты Фишера, характеризующие качество приближений функций и к заданному результату :

, ;

9. в заключение алгоритм должен сравнить полученные значения и - лучшей регрессионной зависимостью является та, для которой коэффициент Фишера имеет большее значение;

В таблице 1.1 представлены факторы и результаты

Таблица 1.1 - Таблица факторов и результатов

Наименование райпо

Оплата труда производственных рабочих, млн р.

Полная факт. Себестоймость, млн р.

Брестское райпо

3

66

Ганцевичское Райпо

12

471

Жабинское райпо

31

973

Барановичское райпо

46

1004

Кобринское райпо

74

941

Каменцкое райпо

87

1478

Пинское райпо

95

4952

Ляховичское райпо

96

2195

Столинское райпо

96

2728

Лунинецкое райпо

108

2985

Малоритское райпо

137

1691

Дрогичинское райпо

147

2932

Березовское райпо

294

5736

Ивановское райпо

344

9658

Ивацевическое райпо

410

7118

Пружанское райпо

663

8275

Формула для расчета первой регрессионной зависимости:

Формула для расчета второй регрессионной зависимости:

Формула для расчета по первой регрессии:

Формула для расчетапо первой регрессии:

Где , n - количество факторов

Формула для расчета по второй регрессии:

Формула для расчетапо второй регрессии:

Где , n - количество факторов

3. Графическая схема алгоритма решения задачи

3.1 Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у (блок AB)

Для вычисления среднего значения, дисперсии, среднеквадратических отклонений фактических массивов x и y нужно два раза обратиться к алгоритму с разными параметрами. Схема алгоритма блока АВ представлена на рисунке 3.2 :

3.2 Вычисление коэффицента парной кораляции (блок СD):

Графическая схема алгоритма вычисления коэффициента парной корреляции представлена на рисунке 3.3

Полученный результат программа по модулю сравнивает с числом 0.5. Если то считают, что между фактором и результатом отсутствует функциональная зависимость. Осуществляется выход из программы. При считают, что функциональная зависимость существует. Выполнение программы продолжается.

Рисунок 3.1 - Обобщенная схема алгоритма решения задачи

Рисунок 3.2 - Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у (детализация блока AB)

Рисунок 3.3 - Вычисление коэффицента парной кораляции ( детализация блока СD )

3.3 Вычисление регресии для первой и второй функции (блок EF)

Для вычисления результатов по регрессионным зависимостям, нужно вычислить коэффициенты a0 и a1 для двух регрессионных зависимостей по следующему алгоритму представленном на рисунке 3.4 :

Рисунок 3.4 - Вычисления коэффициентов a0 и a1 для регрессионных зависимостей (детализация блока EF)

В качестве параметра fi в алгоритме на рисунке(3.4) будут передаваться функции Func1 и Func2. Схема функций представлена на рисунке 3.5:

Рисунок 3.5 - Функции Func1 и Func2

3.4 Вычисление остаточных дисперсий (блок GI)

Для вычисления остаточных дисперсий нам нужно два раза обратиться к алгоритму с разными параметрами. Схема алгоритма блока GI будет иметь вид (рисунок 3.6):

Рисунок 3.6 - Вычисление остаточных дисперсий (детализация блока GI)

4. Расчет параметров регрессионных зависимостей с помощью надстройки Пакет анализа MS Excel

4.1 Расчет параметров регрессионных зависимостей

В таблице 4.1.1 отображены исходные данные: факторы и результаты. Таблицы 4.1.2 и 4.1.3 содержат значения X и Y для первой и второй регрессий. В таблице 4.1.4 находятся значения a0 и a1 для первой и второй регрессий. Таблицы 4.1.5 и 4.1.6 содержат значения регрессионная статистика и дисперсионного анализа по первой регрессии, 4.1.7 и 4.1.8 - по второй регрессии соответственно.

Таблица 4.1.1 - Факторы и результаты

Наименование райпо

Амортизация, млн р

Полная факт. себестоимость, млн р.

Брестское

0,1

66

Ганцевичское

0,1

471

Кобринское

0,1

941

Ляховичское

0,1

2195

Жабинковское

5

973

Барановичское

7

1004

Пружанское

19

8275

Каменекое

36

1478

Ивацевичское

45

7118

Малоритское

49

1691

Столинское

49

2728

Пинское

72

4952

Дрогичинское

80

2932

Берёзовское

91

5736

Лунинецкое

102

2985

Ивановское

238

9658

Таблица 4.1.2 - Значения функции от X для первой регрессии, значения Y для первой регрессии

18,32885077

1057,147297

20,30455337

1429,495203

22,69443117

1879,900031

22,69443117

1879,900031

23,51868097

2035,241065

27,74921581

2832,542633

30,25288977

3304,39389

30,39685557

3331,526195

34,16184815

4041,090021

34,29711079

4066,582097

34,83541357

4168,032543

40,12472891

5164,875633

40,86755673

5304,871591

43,88848277

5874,206006

44,83164857

6051,958369

47,82575039

6616,237396

Таблица 4.1.9 - Значения функции от X для первой регрессии, значения Y для первой регрессии (записанные в формульном виде)

=B2^(1/2)*LN(B2^(1/2))

=$D$20+$D$21*D2

=B3^(1/2)*LN(B3^(1/2))

=$D$20+$D$21*D3

=B4^(1/2)*LN(B4^(1/2))

=$D$20+$D$21*D4

=B5^(1/2)*LN(B5^(1/2))

=$D$20+$D$21*D5

=B6^(1/2)*LN(B6^(1/2))

=$D$20+$D$21*D6

=B7^(1/2)*LN(B7^(1/2))

=$D$20+$D$21*D7

=B8^(1/2)*LN(B8^(1/2))

=$D$20+$D$21*D8

=B9^(1/2)*LN(B9^(1/2))

=$D$20+$D$21*D9

=B10^(1/2)*LN(B10^(1/2))

=$D$20+$D$21*D10

=B11^(1/2)*LN(B11^(1/2))

=$D$20+$D$21*D11

=B12^(1/2)*LN(B12^(1/2))

=$D$20+$D$21*D12

=B13^(1/2)*LN(B13^(1/2))

=$D$20+$D$21*D13

=B14^(1/2)*LN(B14^(1/2))

=$D$20+$D$21*D14

=B15^(1/2)*LN(B15^(1/2))

=$D$20+$D$21*D15

=B16^(1/2)*LN(B16^(1/2))

=$D$20+$D$21*D16

=B17^(1/2)*LN(B17^(1/2))

=$D$20+$D$21*D17

Таблица 4.1.3 - Значения функции от X для второй регрессии, значения Y для второй регрессии

5256,497725

1685,139127

6972,498022

1815,221549

9506,498304

2007,312946

9506,498304

2007,312946

10506,49839

2083,118546

16770,49872

2557,964813

21462,49887

2913,644672

21756,49888

2935,931517

30450,49905

3594,985365

30800,49905

3621,517324

32220,49908

3729,161269

48620,49925

4972,373025

51302,49927

5175,68363

63252,49934

6081,560485

67340,49936

6391,453756

81510,49942

7465,619028

Таблица 4.1.10 - Значения функции от X для второй регрессии, значения Y для второй регрессии(записанные в формульном виде)

=B2*B2/EXP(1/B2)

=$F$20+$F$21*F2

=B3*B3/EXP(1/B3)

=$F$20+$F$21*F3

=B4*B4/EXP(1/B4)

=$F$20+$F$21*F4

=B5*B5/EXP(1/B5)

=$F$20+$F$21*F5

=B6*B6/EXP(1/B6)

=$F$20+$F$21*F6

=B7*B7/EXP(1/B7)

=$F$20+$F$21*F7

=B8*B8/EXP(1/B8)

=$F$20+$F$21*F8

=B9*B9/EXP(1/B9)

=$F$20+$F$21*F9

=B10*B10/EXP(1/B10)

=$F$20+$F$21*F10

=B11*B11/EXP(1/B11)

=$F$20+$F$21*F11

=B12*B12/EXP(1/B12)

=$F$20+$F$21*F12

=B13*B13/EXP(1/B13)

=$F$20+$F$21*F13

=B14*B14/EXP(1/B14)

=$F$20+$F$21*F14

=B15*B15/EXP(1/B15)

=$F$20+$F$21*F15

=B16*B16/EXP(1/B16)

=$F$20+$F$21*F16

=B17*B17/EXP(1/B17)

=$F$20+$F$21*F17

Таблица 4.1.4 - Значения a0 и a1 для первой и второй регрессий

первая регрессия

вторая регрессия

a0

-2397,172788

1286,667194

a1

188,4635392

0,075805594

Таблица 4.1.5 - Регрессионная статистика по первой регрессии

Регрессионная статистика

Множественный R

0,897807

R-квадрат

0,806057

Нормированный R-квадрат

0,792204

Стандартная ошибка

894,2883

Наблюдения

16

Таблица 4.1.6 - Дисперсионный анализ по первой регрессии

df

SS

MS

F

Значимость F

Регрессия

1

46534505

46534505

58,1862

2,37E-06

Остаток

14

11196523

799751,6

Итого

15

57731028

Коэффициенты

Стандартная ошибка

t-статистика

P-Значение

Нижние 95%

Верхние 95%

Нижние 95,0%

Верхние 95,0%

Y-пересечение

-2397,17

828,7161

-2,89263

0,011813

-4174,59

-619,753

-4174,59

-619,753

Переменная X 1

188,4635

24,70685

7,627988

2,37E-06

135,4726

241,4545

135,4726

241,4545

Таблица 4.1.7 - Регрессионная статистика по второй регрессии

Множественный R

0,9247719

R-квадрат

0,85520306

Нормированный R-квадрат

0,84486042

Стандартная ошибка

772,716727

Наблюдения

16

Таблица 4.1.8 - Дисперсионный анализ по второй регрессии

df

SS

MS

F

Значимость F

Регрессия

1

49371752

49371752

82,68713

2,99E-07

Остаток

14

8359276

597091,1

Итого

15

57731028

Коэффициенты

Стандартная ошибка

t-статистика

P-Значение

Нижние 95%

Верхние 95%

Нижние 95,0%

Верхние 95,0%

Y-пересечен

1286,66719

327,3602

3,930432

0,001509

584,5494

1988,785

584,5494

1988,785

Переменн X 1

0,07580559

0,008336

9,093246

2,99E-07

0,057926

0,093686

0,057926

0,093686

4.2 график с исходными данными и регрессионными зависимостями

График 4.2.1 представляет собой график зависимости валовые доходы от торговли, первой и второй регрессий от амортизация основных средств торговли (в миллионах рублей).

График 4.2.1 - График с исходными данными и регрессионными зависимостями

5. Описание функционирования программного комплекса

Для работы программы необходимо положить в одну папку с исполняемым файлом текстовый документ с расширением txt, содержащий исходные данные. Выполнив программу на экране появится информация о работе (рисунок 5.1). Для продолжения нужно нажать любую клавишу. Во втором пункте находятся задачи (рисунок 5.2). Для продолжения нужно нажать любую клавишу. Далее нужно указать имя файла с разрешением.

В случае отсутствия файла с введенным именем будет выдана ошибка (рисунок 5.3). Если такой файл существует, то вам нужно выбрать вы хотите вывести на экран результат выполнения программы или записать результаты в отдельный файл (рисунок 5.4).Далее выводится таблица входных данных из трех столбцов: названия райпо, факторы X, результаты Y(рисунок 5.5). Далее будет выведены средние значение фактора и результата, дисперсия по X иY, среднеквадратичное отклонение Y, коэффициент парной корреляции, коэффициенты a0 и a1 для первой и второй регрессии (рисунок 5.6).

В случае, если коэффициент парной корреляции меньше чем 0.5, будет выведено сообщение о слабой связи. Если же коэффициент парной корреляции больше 0.5, то будет выведена таблица результатов из пяти столбцов: названия райпо, факторы X, результаты Y, значения Y по первой регрессии, значения Y по второй регрессии (рисунок 5.7). После этого будут выведены результаты: остаточные дисперсии по Y, коэффициенты Фишера для первой и второй регрессий, и вывод о том, какая регрессия более полно отражает результаты (рисунок 5.8).

Рисунок 5.1 - Информация о работе

Рисунок 5.2 - Задачи

Рисунок 5.3 - Ошибка открытия файла

Рисунок 5.4 - Меню выбора действия с файлом

Рисунок 5.5 - Таблица факторов и результатов

Рисунок 5.6 - Вывод средних значений факторов и результатов, дисперсии и среднеквадратического отклонения по X и Y, коэффициента парной корреляции, коэффициенты a0 и a1 для первой и второй регрессии

Рисунок 5.7 - Таблица выходных результатов работы программы (значений Y по первой и второй регрессиям)

Рисунок 5.8 - Вывод результатов (остаточные дисперсии, коэффициенты Фишера, вывод о большем соответствии первой или второй регрессии исходным результатам)

дисперсия корреляция регрессия

Заключение

В результате проведения данной работы было установлено, что исходные данные обладают высоким качеством приближения к обеим регрессионным зависимостям. Однако, среди данных регрессионных зависимостей, наиболее точно отражает исходные данные вторая регрессия, которая соответствует регрессионной зависимости

Кроме того были высчитаны:

1) Средние значения заданных наборов фактора и результата;

2) Дисперсии;

3) Среднеквадратические отклонения;

4) Коэффициент парной корреляции;

5) Характеристики регрессионных зависимостей;

6) Значения результатов по регрессионным зависимостям;

7) Остаточные дисперсии;

8) Коэффициенты Фишера.

Список использованных источников

1. Регрессионный анализ

2. Язык программирования Си

3. Мелещенко, А. Основы программирования на языке /А.А. Мелещенко. - Мн.: БГУИР, 2004. - 232 с.

4. Бусько, В Основы алгоритмизации и программирования: Конспект лекций для студ. всех спец. и форм обуч. БГУИР / В.Л.Бусько, А.Г.Корбит, Т.М. Кривоносова. - Мн.: БГУИР, 2004. - 103 с.

5. Программирование ввода-вывода данных и линейных вычислительных алгоритмов на языке Си: практическое пособие к выполнению лабораторных и контрольных работ по дисциплине “Вычислительная техника и программирование” для студентов технических специальностей дневной и заочной форм обучения (м/УК №3089) / О.А. Кравченко, А.М. Мартыненко. - Гомель: ГГТУ им. П.О. Сухого, 2005. - 33 с.

Приложение А

Код программы на языке C файла kursovaya.cpp:

#include"bibliot.h"//подключаем головную библиотеку

/*подключаем русский язык*/

char bufRus[256];

char *Rus(const char * text)

{

CharToOem(text, bufRus);

return bufRus;

}

main()//главная функция

{

system("color F0");// Цвет экрана и шрифта (F - белый фон, 0 - чёрный шрифт)

puts("\n");

puts (Rus("\t МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ"));

puts (Rus("\t УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ ГОМЕЛЬСКИЙ ГОСУДАРСТВЕННО ТЕХНИЧЕСКИЙ"));

puts (Rus("\t УНИВЕРСИТЕТ ИМ. П.О.СУХОГО"));

puts("\n\n\n\n\n\n\n");

puts(Rus("\t Факультет автоматизированных и информационных систем"));

puts(Rus("\t Кафедра ''Информационные технологии''"));

puts(Rus("\t направление специальности 1-40 01 02-01 Информационные системы и"));

puts(Rus("\t технологии в проектировании и производстве\n\n\n\n\n"));

puts(Rus("\t КУРСОВАЯ РАБОТА"));

puts(Rus("\t по дисциплине ''Основы алгоритмизации и программирования''"));

puts(Rus("\tна тему:''Определение параметров регрессионной зависимости валовых"));

puts(Rus("\t доходов от торговли от амортизации основных средств торговли''"));

puts("\n\n\n\n\n\n\n\n");

puts(Rus("\t Исполнитель: студент гр. ИТ-12"));

puts(Rus("\t Ясонов В.А."));

puts(Rus("\t Руководитель: Лозовская Е.В."));

puts("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

puts(Rus("\t Гомель 2012"));

getch();

system("cls");

puts(Rus("Задание:"));

printf(Rus("Целью курсовой работы является получение студентами навыков по алгоритмизации и программированию.\nВ процессе выполнения работы студент решает следующие задачи:\n1)разработка алгоритма вычисления статистических характеристик по заданным формулам;\n2)запись алгоритма в виде блок-схемы и программы на языке Си;\n3)подготовка данных для отладки программы средствами табличного процессора MS Excel;\n4)изучение теоретических вопросов использования системы программирования.\n\nНа основе указанных исходных данных требуется написать программу на языке C, которая для заданных наборов фактора и результата рассчитывает следующие статистические характеристики:\n1)средние значения этих наборов\n2)дисперсии\n3)среднеквадратические отклонения\n4)коэффициент парной корреляции\n5)регрессионные зависимости\n6)значения результата по регрессионным зависимостям\n7)остаточные дисперсии\n8)коэффициенты Фишера\n"));

getch();

system("cls");

char nazv[50], s[100], vib;// Название райпо, вспомогательная строка, переменная для выбора - на экран выводить результаты или в файл

float x[100], y[100];// x - прочие производственне расходы, y - полная фактическая себестоимость

float Sx, Sy, Srx, Sry;// Sx, Sy - суммы элементов массивов x и y, Srx, Sry - Средние значения элементов массивов x и y

int i, n;// i - номер райпо, параметр цикла, n - количество райпо

float Somx, Somy, r;// Среднеквадратичные отклонения, коэффициент парной корреляции

float regr1[100], regr2[100], a0, a1;//значения первой и второй регрессий, коэффициенты a0, a1

float OstDisp1, OstDisp2, Fish1, Fish2;//Значения остаточных дисперсий, коэффициенты Фишера

char file[100];

FILE*f;// Описание файловой переменной

FILE*fout;//Файловая переменная для записи результатов

puts(Rus("Введите название файла"));

gets(file);

f=fopen(file,"r");// Открытие файла в режиме "r" - только чтение

system("cls");

if(f==NULL)// Проверяем, открылся ли файл, если значение NULL - ошибка открытия.

{

system("color 4F");// Цвет экрана и шрифта (4 - красный фон, F - белый шрифт)

puts(Rus("\n\n\n\n\n\n\n\n\n\n\t\t\tОшибка открытия файла!"));// Вывод сообщения об ошибке

}

else// Иначе...

{

printf(Rus("1)Для вывода на экран нажмите клавишу Enter\n2)Для записи данных в файл нажмит любую другую клавишу"));

scanf("%c", &vib);

system("cls");//Очистка экрана

if(vib=='\n')// Нажата клавиша Enter?

fout=fopen("con","a");// con - консоль (вывод на экран)

else// Иначе...

{

fout=fopen("fail.dat","w");//Открытие файла в режиме "w" - запись данных, все предыдущие данные стирются

printf( Rus("Файл записан,для выхода нажмите любую клавишу...\n"));//Вывод сообщения о том что информация записана в файл

}

/*Выводим шапку таблицы*/

fprintf(fout,"\t\xDA\xc4\xc4\xc4\xc2\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc2\xc4\xc4\xc4\xc4\xc4\xc4\xc2\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xbf\n");

i=0;// Счетчик количества строк в файле

/*Считываем данные из файла,одновременно выводя их в таблицу*/

while(!feof(f))// Пока не конец файла...

{

fgets(s, 80, f);// Считываем строку, не более 80 символов. (Считает до ближайшего перехода на следующую строку - символа '\n').

strncpy(nazv, s, 21);//Из строки s копируем первые 21 символ в строку navz

nazv[19]='\0';// Последнему символу присваиваем значение '\0' - конец строки.

x[i]=atof(&s[20]);//Начиная с 21 символа считываем значение х (все цифры до пробела)

y[i]=atof(&s[25]);//Начиная с 25 символа считываем значение у (все цифры до конц строки)

fprintf(fout,"\t\xb3%3d\xb3\%-21s\xb3%6.1f\xb3%7.1f\xb3\n", i+1, Rus(nazv), x[i], y[i]); //Выводим полученные значения.

i++;// Увеличиваем счетчик элементов на единицу

}

n=i;// Запоминаем количество элементов массива

/*Выводим низ таблицы*/

fprintf(fout,"\t\xc0\xc4\xc4\xc4\xc1\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xc1\xc4\xc4\xc4\xc4\xc4\xc4\xc1\xc4\xc4\xc4\xc4\xc4\xc4\xc4\xd9\n");

/*Вычисляем статистические величины - сумму, среднее значение, среднеквадратичное отклонение*/

statistic(n, x, &Sx, &Srx, &Somx);

statistic(n, y, &Sy, &Sry, &Somy);

/* Вывод сумм, средних значений и среднеквадратичных отклонений*/

fprintf(fout,Rus("Результаты вычислений в массиве x\nСреднее значение: %-15.f\nСреднеквадратичное отклонение: %.3f\n\n"), Sx, Srx, Somx);

fprintf(fout,Rus("Результаты вычислений в массиве y\nСреднее значение: %-15.f\nСреднеквадратичное отклонение: %.3f\n"), Sy, Sry, Somy);

r=top(n, x, Srx, y, Sry)/((n-1)*Somx*Somy);//Вычисление коэффициента парной корреляции

fprintf(fout,Rus("\nКоэффициент парной корреляции %.3f\n\n"), r);//Вывод коэффициента парной корреляции

if(fabs(r)<=0.5)//Если коэффициент парной коррелдяции по модулю меньше 0.5

{

system("color FC");// Цвет экрана и шрифта (F - белый фон, C - красный шрифт)

fprintf(fout, Rus("Связь между x и y слабая!"));//Вывод сообщения о слабой связи между x и у.

}

else//Иначе

{

regr(n, Sy, fi1, x, &a0, &a1, y);//Вычисление коэффициентов a0 и a1 для первой регрессии

/*Вычисление значений первой регрессии*/

for(i=0; i<n; i++)

regr1[i]=a0+a1*fi1(x[i]);

fprintf(fout,Rus("Коэффициенты а0 и а1 для первой регрессии:\n a0=%.3f\n a1=%.3f\n\n"),a0,a1);

regr(n, Sy, fi2, x, &a0, &a1, y);//Вычисление коэффициентов a0 и a1 для второй регрессии

/*Вычисление значений второй регрессии*/

for(i=0; i<n; i++)

regr2[i]=a0+a1*fi2(x[i]);

fprintf(fout,Rus("Коэффициенты а0 и а1 для второй регрессии:\n a0=%.3f\n a1=%.3f\n\n"),a0,a1);

/*Вывод значений первой и второй регрессии*/

f=fopen(file,"r");

fprintf(fout,"\xDA\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC2\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xBF");//Шапка таблицы

fprintf(fout,"\n\xB3");

fprintf(fout, Rus("Название "));

fprintf(fout,"\xB3 X \xB3 Y \xB3 reg1 \xB3 reg2 \xB3\n");

fprintf(fout,"\xC3\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xB4");

i=0;

while(!feof(f))

{

fgets(s, 80, f);// Считываем строку, не более 80 символов. (Считает до ближайшего перехода на следующую строку - символа '\n').

strncpy(nazv, s, 21);//Из строки s копируем первые 21 символ в строку navz

nazv[19]='\0';

fprintf(fout,"\n\xB3%-20s\xB3%-8.3f\xB3%-8.3f\xB3%-10.3f\xB3%-10.3f\xB3\n",Rus(nazv),x[i],y[i],regr1[i],regr2[i]);

fprintf(fout,"\xC3\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC5\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xB4");

i++;

}

fprintf(fout,"\r\xC0\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC1\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xC4\xD9\n");//Низ таблицы

n=i;

/*Вычисление остаточных дисперсий первой и второй регрессии*/

OstDisp1=disp (n, y, regr1);

OstDisp2=disp (n, y, regr2);

/*Вывод остаточных дисперсий*/

fprintf(fout, Rus("\n\nОстаточная дисперсия первой регрессии: %-10.1f\nОстаточная дисперсия второй регрессии: %-10.1f\n"), OstDisp1, OstDisp2);

/*Вычисление коэффициентов Фишера*/

Fish1=Somy*Somy/OstDisp1;

Fish2=Somy*Somy/OstDisp2;

fprintf(fout,Rus("\nКоэффициент Фишера для первой регрессии: %.3f\nКоэффициент Фишера для второй регрессии: %.3f\n\n"), Fish1, Fish2);//Вывод коэффициентов Фишера

if(Fish1>Fish2)//Если коэффициент Фишера для первой регрессии больше, чем для второй...

fprintf(fout,Rus("Первая регрессия \"лучше\""));//Выводим сообщение

else//Иначе...

fprintf(fout,Rus("Вторая регрессия \"лучше\"\n"));//Выводим сообщение

}

fclose(f);//Закрытие файла с исходными данными

fclose(fout);//Закрытие файла с результатами

}

getch();

return(0);

}

Приложение Б

Код библиотеки bibliot.h:

#ifndef _bibliot_H_

#define _bibliot_H_s_

#include <stdio.h>

#include <conio.h>

#include <windows.h>

#include <string.h>

#include <math.h>

typedef float (*func)(float);

/*Вычисление среднего х и у, дисперсий x и у, среднеквадратичное отклонение х и у*/

void statistic(int n, float a[], float *S, float *Sr, float *Som)

{

int i;

float D;

*S=0;

for(i=0; i<n; i++)

*S=*S+a[i];

*Sr=*S/n;

D=0;

for(i=0; i<n; i++)

D=D+(a[i]-*Sr)*(a[i]-*Sr);

D=D/(n-1);

*Som=sqrt(D);

}

/*Вычисление коэффициента парной корреляции*/

float top (int n, float a[], float Sra, float b[], float Srb)

{

int i;

float S;

S=0;

for(i=0;i<n;i++)

S=S+(a[i]-Sra)*(b[i]-Srb);

return (S);

}

/*Вычисление результатов по регрессионным зависимостям*/

void regr(int n, float Sy, func fi, float a[], float *a0, float *a1, float b[])

{

int i;

float S1, S2, S3, d;

S1=0;

for(i=0; i<n; i++)

S1=S1+fi(a[i])*fi(a[i]);

S2=0;

for(i=0; i<n; i++)

S2=S2+fi(a[i]);

S3=0;

for(i=0; i<n;i++)

S3=S3+b[i]*fi(a[i]);

d=n*S1-S2*S2;

*a0=(Sy*S1-S2*S3)/d;

*a1=(n*S3-S2*Sy)/d;

}

/*Функция x=sqrt(x)*(log(sqrt(x)));*/

float fi1 (float x)

{

x=sqrt(x)*(log(sqrt(x)));

return(x);

}

/*Функция x=(x*x)/exp(1/x)*/

float fi2 (float x)

{

x=(x*x)/exp(1/x);

return(x);

}

/*Вычисление остаточных дисперсий*/

float disp (int n, float a[], float b[])

{

int i;

float S;

float D;

S=0;

for(i=0; i<n; i++)

S=S+(a[i]-b[i])*(a[i]-b[i]);

D=S/(n-1);

return(D);

}

#endif

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.