Определение параметров регрессионной зависимости полной фактической себестоимости топлива и электроэнергии, расходуемой на технологические цели
Регрессионный анализ, его цели. Алгоритм вычисления статистических характеристик по заданным формулам. Запись алгоритма в виде блок-схемы и программы на языке Си. Отладка программы средствами табличного процессора. Функционирование программного комплекса.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 13.01.2016 |
Размер файла | 1,2 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования «Гомельский государственный технический университет имени П.О. Сухого»
Факультет автоматизированных и информационных систем
Кафедра «Информационные технологии»
направление специальности 1-40 01 02-01 «Информационные системы и технологии в проектировании и производстве»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине «Основы алгоритмизации и программирования»
на тему: «Определение параметров регрессионной зависимости полной фактической себестоимости топлива и электроэнергии, расходуемой на технологические цели»
Исполнитель:
студент гр. ИТ-11
Батраков М.В.
Руководитель:
Кравченко О.А.
Гомель 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 - Таблица факторов и результатов
Наименование райпо |
Амортизация основных средств торговли, млн. р. |
Валовые доходы от торговли, млн. р. |
|
Ляховичское |
73 |
1797 |
|
Жабинковское |
84 |
1523 |
|
Барановичское |
98 |
2526 |
|
Брестское |
98 |
2273 |
|
Ганцевичское |
103 |
2097 |
|
Малоритское |
130 |
1992 |
|
Каменецкое |
147 |
2875 |
|
Кобринское |
148 |
2115 |
|
Ивановское |
175 |
3484 |
|
Березовское |
176 |
4549 |
|
Дрогичинское |
180 |
3579 |
|
Лунинецкое |
221 |
6821 |
|
Пинское |
227 |
4349 |
|
Пружанское |
252 |
4854 |
|
Ивацевичское |
260 |
6139 |
|
Столинское |
286 |
8065 |
Формула для расчета первой регрессионной зависимости:
Формула для расчета второй регрессионной зависимости:
Формула для расчета по первой регрессии:
Формула для расчетапо первой регрессии:
Где , n - количество факторов
Формула для расчета по второй регрессии:
Формула для расчетапо второй регрессии:
Где , n - количество факторов
3. Графическая схема алгоритма решения задачи
Рисунок 3.1 - Обобщенная схема алгоритма решения задачи
3.1 Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у (блок AB)
Для вычисления среднего значения, дисперсии, среднеквадратических отклонений фактических массивов x и y нужно два раза обратиться к алгоритму с разными параметрами. Схема алгоритма блока АВ представлена на рисунке 3.2:
Рисунок 3.2 - Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у (детализация блока AB)
3.2 Вычисление коэффицента парной кораляции (блок СD):
Графическая схема алгоритма вычисления коэффициента парной корреляции представлена на рисунке 3.3:
Рисунок 3.3 - Вычисление коэффицента парной кораляции (детализация блока СD )
Полученный результат программа по модулю сравнивает с числом 0.5. Если то считают, что между фактором и результатом отсутствует функциональная зависимость. Осуществляется выход из программы. При считают, что функциональная зависимость существует. Выполнение программы продолжается.
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. Регрессионный анализ [Электронный ресурс]. - 2012. - Режим доступа: http//am.tsuab.ru/files/ONI_lections45.pdf- Дата доступа :12.05.2012.2.Язык программирования Си [Электронный ресурс]. - 2012 -Режим доступа: http://kpolyakov.narod.ru/school/c.htm/Хранениеиобработкаданных Дата доступа: 12.05.2012.
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
Подобные документы
Функции ввода-вывода строк и символов языка Си. Вычисление среднего значения, дисперсии, среднеквадратических отклонений х и у, коэффициента парной корреляции, регрессии двух функций, остаточных дисперсий. Расчет параметров регрессионных зависимостей.
курсовая работа [421,7 K], добавлен 12.03.2016Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.
курсовая работа [69,8 K], добавлен 13.02.2012Разработка программы, обеспечивающей быстрый вывод итога регресса зависимости, что позволит даже практически неподготовленному пользователю ЭВМ быстро получить необходимый результат расчета. Среда разработки Borland С++ Builder в виде оконного приложения.
курсовая работа [702,1 K], добавлен 09.07.2012Особенности вычисления по формулам в Microsoft Visual Basic с использованием функции If. Применение циклов и разветвлений. Визуальные объекты, составление алгоритмов задачи, блок-схемы и программного кода. Введение переменных, определение типа данных.
лабораторная работа [558,5 K], добавлен 23.05.2014Разработка алгоритма синтеза пленочного резистора по заданным параметрам исходного резистора, программы реализации данного алгоритма на языке С++. Отладка и тестирование программы, составление документации и инструкции пользователя данной программой.
курсовая работа [1,7 M], добавлен 08.06.2009Основные алгоритмические структуры. Запись алгоритма в словесной форме, в виде блок-схемы. Система команд исполнителя. Язык высокого уровня. Создание программы и её отладка. Интегрированные среды разработки: Integrated Development Environment, IDE.
лекция [61,7 K], добавлен 09.10.2013Разработка алгоритма и написание программы на языке Object Pascal, предназначенной для расчета траверса крюка мостового крана на изгиб. Определение расчетных размеров крана с помощью табличного процессора Microsoft Excel. Блок-схема и алгоритм расчета.
курсовая работа [519,3 K], добавлен 03.06.2010Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Значение программы Ехсеl для обработки статистической информации и представления данных в виде графиков и диаграмм. Использование способности программы производить математические вычисления по заданным формулам для определения заработка шоферов.
контрольная работа [3,0 M], добавлен 26.01.2010Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.
лабораторная работа [124,7 K], добавлен 09.01.2012