Поиск локального минимума методом градиентного спуска

Содержание 

          Введение

 

      Информатика является основной базой для проведения научно-исследовательских и проектно-технических  работ в современной промышленности. С помощью аппаратно-программных комплексов выполняются как научно-технические расчеты, так и информационный и патентный поиск данных по необходимой тематике.

      Согласно заданию цель данной курсовой работы – разработка программы численного решения эллептического дифференциального уравнения Лапласа в частных производных метода Дирихле в среде программирования Borland C++Builder для персонального компьютера. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

      1 Описание поставленной  задачи

      1.1 Краткая характеристика численного метода

 

      Этот метод является наиболее часто используемым представителем методов

первого порядка. Градиент (13.7.4) указывает направление  наибольшей скорости

возрастания целевой  функции. Движение к минимуму функции  производится в направлении –grad F(x), которое называется антиградиентом.

     В методе наискорейшего спуска осуществляется движение вдоль направления антиградиента. При этом итерационный процесс уточнения  оптимального значения функции реализуется  согласно выражения:

  _K+1_K _K

X = X + DX

     _i

где DX – приращение вектора X на i-й итерации, который в методе наискорейшего спуска определяется как

                        

где αK – величина оптимального шага на i-й итерации, для простого

случая (метод с  постоянным шаговым множителем) αK=1;

S – вектор в направлении градиента функции.

Модуль градиента определяется по формуле

                                                                  

Для двухпараметрической  целевой функции выражение 

примет вид 

Тогда составляющие вектора направления градиента

Выражения частных  производных градиента могут  задаваться аналитически с помощью  подпрограмм или определяться численно.

     1.2 Анализ литературы и программ, патентный список

 

      Описание  численного метода Кранка-Николсона  рассмотрено в [1] и на сайтах Интернет, посвященных компьютерной математики находится на следующих сайтах:

      - www.exponenta.ru;

      - http://dxdy.ru

      Поиск данных в Интернет производился с  помощью поисковой службы Google.by

     1.3 Формирование требований  к программе

 

      Разрабатываемая программа должна удовлетворять следующим требованиям:

    1. тип операционной системы – Windows XP/Vista/7;
    2. система программирования – Borland C++Builder не ниже v5.0;
    3. формат файла исходных данных – текстовый;
    4. форма вывода результатов расчета:

      - таблица результатов расчета искомой функции с сохранением в текстовый файл;

    5) формат файла справки – html.

 

       2 Проектирование схем алгоритмов

      2.1 Разработка алгоритма  головной программы

 

     Схема алгоритма головной программы описывает  общий сценарий работы разрабатываемого приложения. В составе проекта  приложения предусматривается пять форм:

    1. главная форма приложения;
    2. форма ввода исходных данных;
    3. форма отображения результатов расчета;
    4. форма информации о программе.

     При запуске приложения отображается главная  форма, на которой находятся управляющие  элементы: главное меню и кнопки инструментов. В схеме головного алгоритма предусматривается обработка следующих событий (нажатие соответствующей кнопки или выбор пункта главного меню):

     1) вызов формы для ввода исходных  данных;

     2) загрузка  созданного  ранее   файла  с   исходными   данными;

     3) поиск локального минимума двухпараметрической функции на основе метода градиентного спуска, при условии ввода исходных данных;

     4) отображение результатов расчета, при условии успешного расчета;

     5)  вывод формы с информацией   о программе; 

     6) выход из программы.

     В схеме алгоритма предусматривается  контроль и    блокирование следующих  действий  пользователя:

     1)  запуск численного  решения   при  отсутствии  ввода исходных  данных;

     2) просмотр  результатов  расчета без успешного завершения этапа численного решения.

     Схема алгоритма головной программы изображается    согласно  требований ГОСТ   19.701-90  на  рисунке   2.1.  
 
 
 
 

 

 

 
 

      Ввод  данных

 

  

 Расчёт            Нет

 

 Да

    

 Загрузить

                                 
 
 

 Закрыть

  

      Результат 

 
 

 О программе

 

  
 
 
 
 

       
       

      Рисунок 2.1 –  Схема алгоритма приложения

      2.2 Проектирование алгоритма  ввода исходных данных

 

      Исходными данными будут являться:

      1) A,B,C,D,E,F – коэффициенты функции;

      2) e – точность;

      3) X0,Y0 – начальная точка;

      Схема алгоритма ввода исходных данных из текстового файла показана на рисунке 2.2.

 

 
 

                  
 
 
 
 
 
 

  
 
 

 

                

 

                

 
 

                  

      Рисунок 2.2 – Схема алгоритма ввода данных из файла

      Ввод  исходных данных возможен также с  клавиатуры на форме ввода. При этом исходные данные вводятся в текстовых  полях однострочных редакторов. Алгоритм окончательного считывания данных из файла, где вместо операции чтения из файла производится чтение данных из поля нужного компонента с преобразованием из строкового в численный тип.  

      2.3 Проектирование алгоритма  вывода результатов

 

     Результаты  расчета будет являться точка с координатами X, Y и значение функции в этой точке.

      2.4 Проектирование алгоритма  численного метода

 

     Схема алгоритма поиска локального минимума двухпараметрической функции на основе метода градиентного спуска изображена на рисунке 2.4 

               

                 
 
 

               

                 

               

               

                 
 
 
 
 
 

               

                нет

                 

                 
 
 

                 

                  
 

      Рисунок 2.4 – Схема алгоритма численного метода

      3 Кодирование программы  в среде программирования

      3.1 Разработка структуры  программы

 

      Согласно  заданию проект программы разрабатывается  в среде визуального программирования C++Builder версии 6.0 на основе составленных блок-схем алгоритмов.

          В составе проекта входят следующие  формы:

  1.    FormM – главная форма (модуль Unit1), на которой располагается системное меню;
  2. FormD – форма ввода исходных данных и выполнения расчета (модуль Unit2);
  3. FormR – форма отображения результатов расчета (модуль Unit3);
  4. FormP – форма с информацией по программе (модуль Unit4);

     3.2 Разработка интерфейса  пользователя

      3.2.1 Разработка интерфейса  головной формы.

 

    Рисунок 3.1 – Вид проекта главной формы.

          В составе интерфейса главной формы используются следующие визуальные компоненты:

  1. MainMenu – главное меню приложения со следующими разделами:

    а) «Меню» (компонент N1 класса TMenuItem) –

имеет следующие  разделы:

          - «Ввод данных» (N2 класса TMenuItem) –

переход на форму Form2 для ввода данных;

      - «Выход» (N4 класса TMenuItem) –выход из программы;

    б) «Результат» (N5 класса TMenuItem) – отображение Form3 для просмотра результата 

     в) «Справка» (N6 класса TMenuItem) – отображение информации о программе на форме Form4;

     2) компоненты TLabel текстовых меток:

     -Label1 для отображения строки «A*X^2+B*Y^2+C*X+D*Y+E*X*Y+F»;

      3)кнопки управления класса TButton:

      - ButtonVVOD – ввод данных;

      - ButtonREZ – вывод таблицы с результатами расчета;

      - ButtonEXIT – выход из программы.

      3.2.2 Интерфейс формы  ввода данных Form2

        

    Рисунок 3.2 – Форма ввода исходных данных

      На  форме используются следующие компоненты:

  1. Однострочные редакторы класса TEdit для ввода исходных данных:

     - EditA – коэффициент A;

  • EditB – коэффициент B;
  • EditC – коэффициент C;
  • EditD – коэффициент D;
  • EditEE – коэффициент E;
  • EditF – коэффициент F;
  • EditX0 – начальное значение X;
  • EditY0 – начальное значение Y;
  • EditE – точность;
  1. Текстовые надписи класса Label для пояснения назначения вышеописанных компонентов TEdit Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9;
  1. Кнопка управления класса TButton:
    • ButtonRUN для запуска расчета;
    • ButtonLOAD для загрузки исходных данных из файла;
    • ButtonCL для закрытия формы ввода данных;

      3.2.3 Интерфейс формы  результатов расчёта Form3

              

      Рисунок 3.3 – Форма отображения результатов

      На  форме используются следующие компоненты:

      1) кнопки управления класса TButton:

      - ButtonCL – закрытие формы Form3;

      2) EditX – вывод значения X;

         EditY – вывод значения Y;

         EditF – вывод значения F(X,Y); 

3.2.4 Интерфейс формы информации о программе Form4

       

      Рисунок 3.4 – Вид интерфейса формы Form4

      Интерфейс пользователя на форме строится с  помощью следующих стандартных  компонентов C++Builder:

  1. Текстовые надписи класса Label для отображения сведений о программе Label1,  Label2, Label3, Label4, Label5, Label6;

      2) кнопка ButtonCL для закрытия формы с информацией. 

   

      3.3 Программирование  ввода-вывода данных 

      Ввод  исходных данных в проекте реализован 2мя способами:

      1) с помощью формы Form2, где значения переменных    исходных данных считываются из текстовых поле Text    компонентов Edit с последующим преобразованием их в соответствующий вещественный или целочисленный  тип данных;

      2) чтением ранее  сохраненных   значений  из внешнего текстового  файла с помощью  потока ifsteam  из модуля fstream; алгоритм чтения исходных данных    соответствует рисунку 2.2 на форме Form2.

      При отображении результатов расчета  организуется проверка истинности условия  значения логической      переменной D . Если расчет не выполнен, то выводится сообщение с помощью  процедуры ShowMessage(). 

      Отображение  численных  значений выполняется  с помощью формы Form3 в EditX, EditY, EditF, используя   функции  преобразования   численных  данных   в   строковые FloatToStr .

      3.4 Программная реализация численного метода

       

    Программная реализация на языке  C++ для поиска локального минимума двухпараметрической функции на основае метода дирехле  2.4

    В начала тела  функции  проверяется наличие  ввода исходных данных.

    Тексты cpp и h файлов проекта помещаются в Приложение А.

 

 4 Тестирование работоспособности  программы

      4.1 Описание аппаратной  конфигурации для тестирования

 

           Тестирование разработанного приложения выполнялось на персональном компьютере под управлением операционной системы Windows XP SP3 Professional со следующими характеристиками аппаратной части:

  • тип центрального процессора DualCore AMD Athlon:

    -число ядер – 2;

  • тактовая частота процессора – 2700 Мгц;
  • величина напряжения ядра – 1.1-1.4 В;
  • объем кэша данных: L1=128 Кб, L2=1 Мб;
  1. системная плата Gigabyte GA-M52L-S3  с параметрами:

    - форм-фактор ATX;

    - наименование  набора системной логики VIA KT266A;

    - тип  интерфейса подключения видеоадаптера  – PCI-E 16x;

    - максимальный  объем оперативной памяти –  2 Гб;

    - интерфейс подключения жесткого диска – SATA II;

    - встроенный аудиоадаптер Realtek ALC883;

     3)тип видеоадаптера nVIDIA GeForce 9600 GT:

     - наименование графического процессора G94GT;

     - объем и тип видеопамяти –  512 Мб;

     - разрядность шины памяти –  256 Мб;

     - частота ядра GPU 650 МГц и 900 Мгц шины видеопамяти;

     - разъемы для подключения к  монитору – VGA;

     4)параметры монитора:

     - тип монитора PHILIPS I90CW;

     - ширина диагонали экрана –  19 дюймов;

     - интерфейс подключения к компьютеру  – VGA;

     - разрешение по горизонтали и вертикали – 1440х900;

    - частота кадровой разверстки – 75 Гц;

     5) типы внешней памяти компьютера:

     - тип жесткого диска –Seagate ST3500630AS;

     - максимальный объем - 500 Гб;

     - частота вращения шпинделя –  7200 об/мин;

     - интерфейс подключения: SATA-II;

     - объем кэш-памяти жесткого диска – 16 Мб;

     - тип привода оптического диска  – Optiarc DVD RW AD-7203S;

     - значения скорости 40/40/16;

     6) установлен модуль оперативной памяти DDR-2 объемом 2047;

     7) состав интерфейса для подключения  периферийных устройств:

     - 6 разъема стандарта USB 2.0;

     - 1 разъем порта LTP;

     - 2 разъема порта СОМ;

     - блок из 6 аудиоразъемов. 

     4.2 Тестирование разработанной  программы

 

      Разработанное приложение включает в себя загрузочный  файл – Dirihle.exe объемом 85 000 Байт.

      Для тестирования программы используются следующие исходные данные:

A=1

B=1

C=1

D=1

E=1

F=1

X0=1

Y0=1

e=0.01

При вводе  исходных данных форма Form2 имеет вид рисунка 4.1, а после расчета форма Form3 – рисунка 4.2.

      Время расчета составило менее 1 с. 
 

     

      Рисунок 4.2 – Ввод исходных данных 

      

      Рисунок 4.2 – Результат расчета 

   

      Результат расчета в виде текстового файла  приводится в Приложении Б.

      4.3 Решение задачи  в математической системе Mathcad

 

      Для тестирования используется математический пакет Mathcad 14. При этом исходные данные задаются в виде:

 
 
 
 
 
 
 
 
 
 

Результаты  решения в виде графика приводятся в приложении В.

      4.4 Анализ результатов тестирования

 

      По  данным приложения Б получены конечные значения:

          3.3= 0,29 

      По данным приложения В получены конечные значения:

              3.3= 0,3 

      По  данным приложения Г получены конечные значения:

                        Lг=0.3  Tг=0.001 Uг=0.862137

 

      Тогда абсолютное значение ошибки программы  по Mathcad

                        г=|Uб-Uв|

                      ∆г=|0,31-0,29|=0.01 

      Относительное значение ошибки теста Mathcad

                        δг=(%)=100%·| Uб-Uв |/ Uб

            δг=(%)=100%·|0,3-0,29|/0,3=0,033% 

       

            Как видно из данных Приложений Б и В полученная погрешность расчета менее 5%, что допустимо для технических расчетов. Это означает, что схема алгоритма и текста программы написаны верно. 
 
 
 
 
 
 

 

       5 Разработка гипертекстового варианта  документа работы

 

      Html-документ  со справочной информацией по  разработанной программе выполняется  на языке HTML в среде текстового  редактора Блокнот. Полный  исходный  текст    документа находится  в Приложении Д. 

    Рисунок 5.1 – Окно обозревателя Firefox со справкой

 

      Заключение

 

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

      Разработанная программа может использоваться для решения  дифференциального уравнения в частных производных на персональных компьютерах в среде Windows XP.

 

      Список использованных источников

 

     1 Динамическое программирование и уравнения в частных производных. – Москва: издательство «Мир», 1974. – 155 с.

     2 Вычислительная техника и программирование. Методические указания и задания к курсовой работе для студентов специальности 1-53 01 05 «Автоматизированные электроприводы». – Могилев: Белорусско-Российский университет, 2008. – 32 c.

 

  Приложение А

    (Обязательное)

      Тексты спроектированной программы

    Текст файла Project1.cpp 

    //--------------------------------------------------------------------------- 

    #include <vcl.h>

    #pragma hdrstop

    //---------------------------------------------------------------------------

    USEFORM("Unit1.cpp", FormM);

    USEFORM("Unit2.cpp", FormD);

    USEFORM("Unit3.cpp", FormR);

    USEFORM("Unit4.cpp", FormP);

    //---------------------------------------------------------------------------

    WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

    {

            try

            {

                     Application->Initialize();

Поиск локального минимума методом градиентного спуска