Определение параметров регрессионной зависимости полной фактической себестоимости топлива и электроэнергии, расходуемой на технологические цели
Функции ввода-вывода строк и символов языка Си. Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у, коэффициента парной корреляции, регрессии двух функций, остаточных дисперсий. Расчет параметров регрессионных зависимостей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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
Подобные документы
Регрессионный анализ, его цели. Алгоритм вычисления статистических характеристик по заданным формулам. Запись алгоритма в виде блок-схемы и программы на языке Си. Отладка программы средствами табличного процессора. Функционирование программного комплекса.
курсовая работа [1,2 M], добавлен 13.01.2016Разработка программы, обеспечивающей быстрый вывод итога регресса зависимости, что позволит даже практически неподготовленному пользователю ЭВМ быстро получить необходимый результат расчета. Среда разработки Borland С++ Builder в виде оконного приложения.
курсовая работа [702,1 K], добавлен 09.07.2012Графическая схема алгоритма решения. Расчет параметров регрессионных зависимостей с помощью надстройки анализа MS Excel. График с исходными данными и регрессионными зависимостями. Среда программирования Dev-C. Функциональность системы программирования.
курсовая работа [1,0 M], добавлен 19.11.2013Анализ матрицы коэффициентов парной корреляции. Выбор факторных признаков для построения двухфакторной регрессионной модели. Оценка параметров регрессии по методу наименьших квадратов. Нахождение определителей матриц. Применение инструмента Регрессия.
контрольная работа [1,0 M], добавлен 13.01.2013Построение корреляционного поля, гипотеза связи исследуемых факторов. Определение коэффициента корреляции. Оценка статистической значимости вычисленных коэффициентов корреляции. Параметры уравнения линейной парной регрессии, коэффициента эластичности.
реферат [526,7 K], добавлен 10.11.2010Подбор параметров линейной функции. Вычисление значения функции в заданных промежуточных точках с использованием математических пакетов. Исследование математической модели решения задачи. Составление программы для вычисления коэффициента корреляции.
курсовая работа [2,3 M], добавлен 21.10.2014Использование программой функции ввода-вывода данных для реализации дружественного интерфейса с пользователем. Функции консоли и особенности их применения для обеспечения аккуратного ввода информации и упорядоченного вывода. Обзор стандартных функций.
лабораторная работа [40,4 K], добавлен 06.07.2009В стандарте языка Си отсутствуют средства ввода-вывода. Операции реализуются с помощью функций, находящихся в библиотеке языка Си, поставляемой в составе системы программирования Си. Потоковый, форматный ввод-вывод. Форматный ввод из входного потока.
реферат [98,9 K], добавлен 24.06.2008Анализ методов идентификации, основанных на регрессионных процедурах с использованием метода наименьших квадратов. Построение прямой регрессии методом Асковица. Определение значения дисперсии адекватности и воспроизводимости, коэффициентов детерминации.
курсовая работа [549,8 K], добавлен 11.12.2012Задачи линейного программирования. Многоугольник решений системы. Вычисление значения целевой функции. Интервальная группировка данных. Среднее квадратическое отклонение выборки. Вычисление коэффициента корреляции. Закон распределения случайной величины.
контрольная работа [389,6 K], добавлен 11.01.2012