Решение задачи методом линейной регрессии
Курсовая работа, 29 Декабря 2010, автор: пользователь скрыл имя
Краткое описание
Объектом исследования является возможность создать программу расчета параметров (меры отклонения, мера разброса) линейной регрессии
Цель работы состоит в создании программы расчета параметров на языке C++ , не используя дополнительные библиотеки.
Содержание
Введение……………………………………………………..…………. 5
1 Линейная регрессия……………………………………..………….…6
2 Математическая постановка … ……………………….……………..7
3 Блок-схема………………………………………………………….... 10
4 Описание методов, используемых при решении…………………...12
5 Текст программы (листинг)………………………………………… 12
6 Результаты машинного тестирования программы…………………14
Заключение…………………………………………………………… . 15
Список литературы ………………………………………………….. ..16
Прикрепленные файлы: 1 файл
Кусовая ОП.doc
— 140.50 Кб (Скачать документ)
при изменении i от 1 до n.
Проверяя согласие построенной линии регрессии с результатами эксперимента, можно руководствоваться следующими соображениями. Идея любой регрессии состоит в том, чтобы часть изменений измеряемой величины связать с изменением внешних переменных (в данном случае только одна внешняя переменная x). Не предполагая, что y зависит от x, можно было бы за меру разброса результатов эксперимента принять величину e1=å(yi-y)2, где y=(1/n) åyi. Если прямая регрессия построена, то за меру разброса естественно принять сумму квадратов отклонений от линии регрессии, т.е. величину
e2=å(yi-a-0-a1xi)2.
Если e2»e1, то это значит, что аппроксимирующая функция выбрана неудачно, т.е. подходящую функцию регрессии следует искать не среди прямых, а, например, среди парабол или кривых другого вида
2 Математическая постановка задачи
| Имя переменной | Тип | Назначение |
| N | int | Кол-во точек |
| J | int | Счетчик циклов |
| X | float | Массив X |
| Y | float | Массив Y |
| S1 | double | Переменные для мат. операций |
| S2 | double | Переменные для мат. операций |
| S3 | double | Переменные для мат. операций |
| S4 | double | Переменные для мат. операций |
| А0 | double | Параметр регрессии |
| А1 | double | Параметр регрессии |
| Е1 | double | значение меры разброса e1 результатов эксперимента |
| Е2 | double | значение меры e2 отклонений результатов эксперимента от линейной регрессии. |
| S3 | double | В зависимости от текущего алгоритма |
3 Блок-схема
После рассмотрения поставленной задачи был выбран оптимальный алгоритм для создания программы (рис. 1, 2)
4 В этой программе были использованы следующие методы программирования
- Цикл - задает многократное исполнение операторов тела цикла. В данном случае использовали только итерационный цикл(For).
- Массив - это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип. В данной программе описано два одномерных массивов.
- Оператор очистки Экрана.
- Функции - это значение возвращаемое в точку вызова функции, после её выполнения, в данном случае это «regress».
5 Текст программы
#include <iostream.h>
#include <math.h>
#include <conio.h>
double regress(float n,float x[100],float y[100])\\создание функции с \\передачей параметров.
{
double s1=0,s2=0,s3=0,s4=0,a0,a1;\\ добавление переменных
for(int j=1;j<=n;j++)\\ открытие цикла
{\\ начало цикла
s1=s1+x[j]*y[j];\\ выполнение математических операций в теле цикла
s2=s2+x[j];
s3=s3+y[j];
s4=s4+x[j]*x[j];
}\\ конец цикла
a0=(s3*s4-s2*s1)/(n*s4-s2*s2);
a1=(n*s1-s2*s3)/(n*s4-s2*s2);
int ys;\\добавление переменной
ys=s3/n;\\ простое мат. вычисление
double e1=0;\\добавление переменной
double e2=0;\\добавление переменной
for(j=1;j<=n;j++)\\ открытие цикла
{\\ начало цикла
e1=e1+(y[j]-ys)*(y[j]-ys); \\ выполнение математических
операций в
//теле цикла
e2=e2+(y[j]-a0-a1*x[j])*(y[j]-a0-a1*x[j]);
}\\ конец цикла
e1=sqrt(e1);
e2=sqrt(e2);
cout<<"A0="<<a0<<"A1="<<a1<<"\n";//
вывод на экран А0, А1
cout<<"mera razbrosa E1="<<e1<<"\n";// вывод на экран Е1
cout<<"mera otkloneniya ot regresii E2="<<e2<<"\n";// вывод на экран Е2
return a0,a1,e1,e2; \\ возвращение из функции
}
void main()
{
clrscr();\\очистка экрана
int n; \\добавление переменной
float x[100],y[100]; \\добавление массивов
cout<<"vvedite kol-vo opitov \n";\\Вывод на экран
cin>>n;\\запрос клавиатуры переменной
for(int j=1;j<=n;j++)
{
cout<<"input x["<<j<<"]=";\\Вывод на экран
cin>>x[j]; \\запрос клавиатуры переменной
cout<<"input y["<<j<<"]=";\\Вывод на экран
cin>>y[j]; \\запрос клавиатуры переменной
}
regress(n,x,y);\\ уход в функцию
cin>>n;
}
6 Тестирование программы
Входные даны имеют следующий вид
- вводится количество точек(N=10)
№ точки |
X |
Y |
1 |
0.1 |
5.65 |
2 |
0.2 |
5.431 |
3 |
0.3 |
5.25 |
4 |
0.4 |
5 |
5 |
0.5 |
4.79 |
6 |
0.6 |
4.569 |
7 |
0.7 |
4.296 |
8 |
0.8 |
4.065 |
9 |
0.9 |
3.837 |
10 |
1 |
3.519 |
ввод координат точек в массив
Выходные данные
- a0 - значение параметра регрессии; a0=5,9272
- a1 - значение параметра регрессии; a1=-2.3390
- e1 - значение меры разброса e1 результатов эксперимента; e1 =2.1273
- e2 - значение меры e2 отклонений результатов эксперимента от линейной регрессии; e2 =0.10755.
Программа занимает места на диске - 52kb
Во время работы занимает оперативной памяти – 2160b
Заключение.
Данная курсовая работа представляет собой программный продукт, предназначенный для работы в DOS. Программный продукт написан на популярном языке C++, который позволил наиболее просто представить эту работу.
В ходе выполнения курсового проекта я ознакомился с новыми приемами программирования и особенностями языка С++ что позволило разработать данный программный продукт. Программа является полностью работоспособной, что подтверждается результатами её тестированием.
Данная курсовая работа может быть полезна студентам математических и технических факультетов ВУЗов и техникумов, для расчета и проверки данного интеграла. А также студентов технических ВУЗов, для изучения и совершенствования данного программного кода.
Список использованной литературы.
- Методические указания к лабораторным работам
- С/С++ Программирование на языке высшего уровня СПб:Питер 2007
Т.А. Павловская 461 ст.
3. Справочник
по высшей математике М.Я.
4. Архангельский А. я. C++Builder 6. Справочное пособие. Книга 1. язык C++. - М.: бином-Пресс, 2004. – 544 с.