Згладжування функцій за методом найменших квадратів

Автор: Пользователь скрыл имя, 25 Января 2012 в 23:44, курсовая работа

Описание работы

В даній курсовій роботі було розглянуто згладжування функцій методом найменших квадратів та розроблено програму для реалізації даного методу. Програма написана на мові C++ в програмному середовищі Borland C++ 3.1. У курсовій роботі приведений алгоритм розв’язання задачі та інструкція користувача. Програма протестована на працездатність та конкретним прикладом перевірена правильність результату.

Содержание

ВСТУП…………………………………………………………………………….…4
1 ТЕОРЕТИЧНІ ВІДОМОСТІ…………………………………………...……….....6
1.1 Область застосування задачі………………………………………......…7
1.2 Математичне обґрунтування задачі…………………………………..…8
2 РОЗРОБКА АЛГОРИТМУ РОБОТИ ОБЧИСЛЮВАЛЬНОЇ ЗАДАЧІ…….…..9
2.1 Розробка блок-схеми прямого ходу розв’язання СЛАР для згладжування функцій за методом найменших квадратів…………………..……9
3 РОЗРОБКА ПРОГРАМИ………………………………………………………....12
4 РОЗРОБКА ІНСТРУКТИВНИХ ДОКУМЕНТІВ ПО РОБОТІ З ПРОГРАМОЮ……………………………………………………………………....16
4.1 Тестовий приклад………………………………………………………..16
4.2 Оцінка ефективності розробленої програми…………………………..16
4.3 Використані технічні засоби…………………………….…….………..17
4.4 Інструкція користувачу…………………………….……………….…..17
ВИСНОВКИ…………………………………………………………………...… ..20
ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ………………………………….......... .21

Работа содержит 1 файл

курсова робота.doc

— 147.00 Кб (Скачать)
gn="justify">     Нехай в таблиці відомих значень  функції є  пар таких значень, тоді при проведенні згладжування, наближення будемо шукати у вигляді полінома, максимальна степінь якого також .

     Процесом  згладжування буде параболічна інтерполяція, тобто в якості інтерполюючої  функції береться многочлен

     

. 

void solve() {

      FILE *in;

      boolean isBreak=false;

      int oldColor=getcolor();

      int i,j,k,t,res;

      if ((in=fopen("DATA.TXT","rt"))==NULL) {

            fprintf(stderr, "Cannot open input file.\n");

      } else {

            cleardevice();

            fscanf(in,"%d",&N);

             points=new point[N];

             for (i=0;i<N;i++) {

                  fscanf(in,"%d%d",&(points[i].x),&(points[i].y));

                  showPixel(i);

             }

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

             for (j=0;j<N;j++)

                  for (k=0;k<N;k++)

                        for (t=0;t<N;t++) {

                              if (contain(i,j,k,t)==-1) {

                                    res=isRomb(i,j,k,t);

                              }

                        }

//   delete points;

                  int tmp,tmp2;

                  for (tmp=0;tmp<N;tmp++) {

                        showPixel(tmp);

                        if (tmp!=0) {

                              line(points[tmp-1].x, points[tmp-1].y, points[tmp].x, points[tmp].y);

                        }

                  }

                  getch();

                  if (count1>0) {

                        setcolor(ROMB_COLOR);

                        for (tmp=0;tmp<count1;tmp++)

                              draw(rhombs[tmp][0],rhombs[tmp][1],

                                    rhombs[tmp][2],rhombs[tmp][3]);

                        getch();

                  } else {

                        settextstyle(0,0,2);

                        setcolor(RED);

                        getch();

                  }

                  cleardevice();

                  for (tmp=0;tmp<N;tmp++) showPixel(tmp);

                  if (count2>0) {

                        setcolor(SQUARE_COLOR);

                        for (tmp=0;tmp<count2;tmp++)

                              draw(squares[tmp][0],squares[tmp][1],

                                    squares[tmp][2],squares[tmp][3]);

                        getch();

                  } else {

                        settextstyle(0,0,2);

                        setcolor(RED);

                        getch();

                        cleardevice();

                        for (tmp=0;tmp<N;tmp++) showPixel(tmp);

                  }

                  cleardevice();

                  for (tmp=0;tmp<N;tmp++) showPixel(tmp);

                  if (count1>0) {

                        long sq=0;

                        for (tmp=0;tmp<count1;tmp++) sq+=square(tmp);

                        if (count1!=0) sq/=count1;

                        int bl=0;

                        setcolor(LIGHTBLUE);

                        for (tmp=1;tmp<count1;tmp++)

                              if ((square(tmp)-sq)<(square(bl)-sq)) bl=tmp;

                        draw(rhombs[bl][0],rhombs[bl][1],

                              rhombs[bl][2],rhombs[bl][3]);

                        getch();

                  }

      setcolor(oldColor);

      fclose(in);

   }

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

4 РОЗРОБКА ІНСТРУКТИВНИХ  ДОКУМЕНТІВ ПО  РОБОТІ З ПРОГРАМОЮ  

4.1 Тестовий приклад 

     Для тестування розробленої програми задамо вхідними даними набір наступний точок:

1 1

2 -10

10 20

18 9

     Дана  послідовність задає функцію, що має зубчату форму. Програма згладила задану функцію і отримала іншу функцію, що є параболічною інтерполяцією  заданої та відхиляється від неї з досить малою похибкою.

     Це  свідчить про вірність підходу до поставленої задачі і вірність програмної реалізації згладжування функції за допомогою методу найменших квадратів. 

     4.2 Оцінка ефективності розробленої програми 

     Програма  призначені для розв’язання заданого інтегралу та розроблена в середовищі Borland C++ 3.1 за допомогою власних функцій.

     Ефективність  функціонування програми підвищена  за рахунок наступних засобів:

  • використання циклів для зменшення розмірів програми та для підвищення її ефективності;
  • використання локальних змінних, які використовуються лише в окремих процедурах, що значно полегшує роботу з текстом програми та пошук помилок.

     Вимоги  до ЕОМ для використання даної  програми:

    • IBM PC або еквівалентний комп'ютер та монітор з розширенням 600 x 800 або краще.
    • Microsoft Windows 95 або вище.
    • мінімум 8МВ ОЗП.
    • мінімум 1МВ вільного місця на твердому диску.

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

4.3 Використані технічні засоби 

     Для написання  програми використовувалась програмне середовище Borland C++ версії 3.1. Скомпільована програма вимагає наявності середовища Windows чи DOS, проте не потребує великих системних ресурсів. Щоб забезпечити нормальне функціонування програми, необхідна наявність в робочому каталозі, звідки виконується завантаження програми, файлів egavga.bgi (для забезпечення роботи у графічному режимі) та keyrus.com (для підтримки відображення українських літер у графічному режимі). Результати програми виводяться на монітор, що не потребує додаткових ресурсів пам’яті. 

4.4 Інструкція користувачу 

     Для роботи програми потрібні наступні файли :

    • data.txt, в ньому знаходяться вхідні дані для розв’язку задачі;
    • autor.txt, в цьому файлі знаходяться відомості про автора програми, що можуть виводитись під час виконання програми, при виборі відповідного пункту меню;
    • egavga.bgi, необхідний для підтримки графічного режиму (EGA чи VGA);
    • index.exe, власне програма;
    • reyrus.com, драйвер, що забезпечує коректне виведення на екран у графічному режимі (EGA, VGA) українських літер;
    • run.bat, пакетний файл, що запускає драйвер keyrus.com, а потім саму програму.

     Виконання програми складається з таких  етапів :

    • авторська заставка. Виводиться при запуску програми, вміщує в себе відомості про автора курсової роботи, групу, факультет та деяке графічне оформлення поданої інформації;
    • вивід меню, обробка вибору його елементів. Є основою програми, при виборі пункту меню відбувається вивід розв’язку задачі чи додаткових відомостей;
    • вихід. Закінчення виконання програми.

     Програма  має інтуїтивно зрозумілий інтерфейс. Вибір пунктів меню відбувається при натисканні мишкою на поле, відведене  для цього елементу.

     Для того, щоб дізнатися умову задачі та відомості про автора курсової роботи та програми необхідно відповідно вибрати пункти меню „Автор” та „Умова”. Для перегляду розв’язку задачі для прикладів, записаних у вхідному файлі даних потрібно вибрати пункт меню „Задача”.

     Вихід з програми відбувається при натисканні клавіші „Esc” (відбувається в будь-який момент виконання програми) чи при виборі пункту меню „Вихід”.

     Дані  для розв’язку задачі потрібно задавати в файлі data.txt. у такому вигляді:

     кількість блоків вхідних даних M;

     кількість точок  для 1–ого тесту;

     абсциса та ордината першої точки першого  тесту;

     ...

     абсциса та ордината N–ої точки 1–ого тесту;

           ...

     кількість точок  для M–ого тесту;

     абсциса та ордината першої точки першого  тесту;

     ...

     абсциса та ордината –ої точки M–ого тесту;

     Кількість тестів, точок в кожному з них та координати точок вводяться в окремій стрічці. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

               ВИСНОВКИ 

     В даній курсовій роботі було вирішено та розроблено програму для проведення згладжування функцій методом найменших квадратів. Було проаналізовано задачу, можливі методи її вирішення та обрано оптимальний розв’язок, правильність програмної реалізації якого перевірено при тестуванні програми та вирішенні типового прикладу.

     Розв’язання оформлено з графічним інтерфейсом та використанням мишки, невибагливе до апаратних ресурсів.

     В процесі роботи набуто досвіду розв’язання  поставлених задач з подальшим  їх оформленням та документуванням. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ 

1.Самарський  А.А. Вступ в чисельні методи. - М.: Наука, 1987. – 286 с.

2.Квєтний  Р.Н., Маліков В.Т. Обчислювальні методи та використання ЕОМ. Вища школа, 1989 – 55 с., 104 с.

3. Гусев В.А., Мордковіч А.Г. - Математика: Справ. матеріали. - М.: Освіта, 1990. - 416 с.

4. Б. Страустрап, „Справочное руководство по С++”.

5. Ал. Стивенс, „Техника программирования на турбо Си”.

6. Д. Элджер, „C++”.

7. Г. Шилдт, „Си для профессиональных программистов ”. 
 
 
 
 
 
 
 
 
 
 
 
 

Информация о работе Згладжування функцій за методом найменших квадратів