Решение задачи методом линейной регрессии

Автор работы: Пользователь скрыл имя, 29 Декабря 2010 в 11:25, курсовая работа

Краткое описание

Объектом исследования является возможность создать программу расчета параметров (меры отклонения, мера разброса) линейной регрессии
Цель работы состоит в создании программы расчета параметров на языке 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)

 
 

                                                                        Рис1

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

                                                                        Рис.2

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

         4 В этой программе были использованы следующие методы программирования

  1. Цикл - задает многократное исполнение операторов тела цикла. В данном случае использовали только итерационный цикл(For).
  2. Массив - это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип. В данной программе описано два одномерных массивов.
  3. Оператор очистки Экрана.
  4. Функции - это значение возвращаемое в точку вызова функции, после её выполнения, в данном случае это «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 Тестирование программы

        Входные даны имеют  следующий  вид

  1. вводится количество точек(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

 ввод координат  точек в массив

 
 
 
 
 
 
 
 
 
 
 
 
 
 

           Выходные данные

    1. a0 - значение  параметра регрессии; a0=5,9272
    2. a1 - значение  параметра регрессии;  a1=-2.3390
    3. e1 - значение  меры  разброса  e1  результатов  эксперимента; e1 =2.1273
    4. e2 - значение  меры  e2  отклонений  результатов эксперимента  от  линейной  регрессии; e2 =0.10755.

    Программа занимает места на диске - 52kb

     Во время работы занимает оперативной памяти – 2160b

       Заключение.

     Данная курсовая работа представляет собой программный продукт, предназначенный для работы в DOS. Программный продукт написан на популярном языке C++, который позволил наиболее просто представить эту работу.

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

      Данная курсовая работа может быть полезна студентам математических и технических факультетов ВУЗов и техникумов, для расчета и проверки данного интеграла. А также студентов технических ВУЗов, для изучения и совершенствования данного программного кода.

 
 
 
 
 
 
 
 
 
 
 
 
 

Список  использованной литературы.

  1. Методические указания к лабораторным работам
  2. С/С++ Программирование на языке высшего уровня СПб:Питер 2007

     Т.А.  Павловская 461 ст.

    3. Справочник  по высшей математике М.Я. Выгодский  2006 991ст.

        4. Архангельский А. я. C++Builder 6. Справочное пособие. Книга 1. язык C++. - М.: бином-Пресс, 2004. – 544 с.

Информация о работе Решение задачи методом линейной регрессии