Программа нахождения минимума функции двух переменных

                    Белорусский национальный технический университет 

 

                         Факультет горного дела и экологии

 

                                             Кафедра «Горные машины»

 

 

                                                 КУРСОВАЯ РАБОТА

 

                                            по дисциплине «Информатика»

 

      

 

 

    Тема Программа нахождения минимума функции двух переменных

 

 

 

 

 

 

 

     Исполнитель: студент факультета ГДЭ, 2 курса,

                              группы 102810 Хамицевич Дмитрий Николаевич

 

     Руководитель проекта: старший преподаватель

                                              Петренко Станислав Михайлович

 

 

 

 

 

 

 

                                                             Минск 2012 

Белорусский национальный технический университет

 

Кафедра «Горные машины»

 

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине «Информатика»

Тема Программа нахождения минимума функции двух переменных

 

 

 

 

 

 

 

 

 

 

 

 

               Исполнитель: _________________________________  Хамицевич Д.Н. 

               студент 2-го курса 102810 группы                                                        

 

               Руководитель проекта: __________________________ Петренко С.М.

               ст. преподаватель

 

 

 

 

 

 

 

 

 

                                                             Минск 2012 

Содержание

                     Введение

1. Постановка  задачи…………………………………………………….....5

2. Математическая формулировка задачи………………………...………6

3. Алгоритмизация  задачи ………………………………………..…...…...8

4. Идентификаторы программы…………………………………………..10

5. Блок –  схема алгоритма………………………………………………...11

6. Текст исходной  программы…………………………………………….20

7. Результаты  выполнения программы…………………………………...25

8. Анализ  результатов……………………………………………………..28

9. Инструкция  по работе с программой………………………………….29

                 Заключение

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

 

 

 

 

                                        Введение

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

         Практически во всех научно-исследовательских институтах, конструкторских бюро, а также простых школьных лабораториях объёмные или очень сложные расчёты производят с помощью компьютера. К настоящему времени существует множество программ, способствующих автоматизации расчётов, а также значительному их упрощению. В большинстве своём - это специализированные программные продукты, предназначенные для нужд конкретного потребителя.

В курсовой работе в соответствии с заданием на проектирование решается задача поиска минимума функции .

В данной пояснительной записке приводится описание последовательности шагов  по составлению программы на алгоритмическом  языке Turbo Pascal 7.0 и результаты применения этой программы.

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

 

1. Постановка задачи

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

                       f(x1,x2)=(x12+x22-1)2+(x13-x2)2                              (1)

  Программа должна обеспечивать выбор метода пользователем посредством меню. Вид функции задаётся в подпрограмме –функции. Определить минимум функции (1).

Таким образом, программа должна обеспечивать возможность:

  • выбора пользователем  метода решения по средствам меню;
  • ввода с клавиатуры исходных данных;
  • реализацию функции в подпрограмме –функции;
  • вывода результатов вычисления на дисплей в удобном для восприятия виде.

Кроме того, целесообразно предоставить пользователю возможность получить краткую справку по программе, а  также давать подсказки по ходу работы с программой.

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

  • программа после загрузки должна выводить на дисплей исходное окно-заставку, в которой отображаются общие сведения о статусе программы и её авторах;
  • после выполнения указанной в строке подсказки процедуры перехода должно выводиться вертикальное меню с пунктами: «Справка», «Метод спирального координатного спуска», «Метод квадратичной интерполяции-экстраполяции» и «Выход»;
  • при выборе в меню пункта «Справка» должна выводиться краткая, справка о назначении программы и порядке работы с ней;
  • после выбора в меню пункта метода решения должно открываться отдельное окно, в котором будут выводиться запросы программы об исходных данных   и в этом же окне после ввода исходных значений будет выводиться результат вычисления виде функции;
  • при выборе пункта меню «Выход» программы должна завершать работу.

 

 

2. Математическая формулировка  задачи

      Многомерная оптимизация заключается в поиске экстремумов функций многих переменных F(x1,x2) (рис. 1).

Рис.1 Поиск  экстремумов функции.

     Одним из наиболее надежных методов прямого поиска экстремума функции N переменных является метод спирального координатного спуска.    

Пусть задана функция n переменных:

                                                   F(x1,x2, . . ., xn).                                (2)

Поиск минимального значения начинаем с некоторой начальной точки  Xk и начального шага d(предельное значение для шага h). :

         d 1 k=h.                                                    (3)

Определяется  направление минимизации целевой  функции f(x)=f(x(1),x(2),…,x(n)) в базисной точке:

                                                                                   (4)

  Для этого  последовательно дают приращение  переменным x(j) в точке хк. Присвоим z=xk. Циклически даем приращение переменным x(j) и формируем z(j)=xk(j)+h, если f(z)<f(xk), если же нет, то z(j)=xk(j)-h, если f(z)<f(xk), иначе z(j)=xk(j). Так для всех j(j=1,2,…,n).

      Вычисляем значение функции в точках

F(X1,...,Xk-h,...,Pn),                                   (5)

F(X1,...,Xk,...,Xn),                                      (6)

F(X1,...,Xk+h,...,xn).                                  (7)

      Если из этих трех значений функция минимальна в крайней точке, то принимаем ее за начальную, если в средней точке (X1,...,Xk,...,Xn), то она принимается за начальную, а размер шага по xk уменьшается на коэффициент r и становится равным по k-му аргументу:

     h1 k=h1 k r.                                                 (8)

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

Метод квадратичной интерполяции-экстраполяции.

При использовании  метода квадратичной интерполяции-экстраполяции в качестве интерполяционной функции на каждом отрезке [xi-1, xi+1] принимается квадратный трехчлен. Уравнение квадратного трехчлена:

y=aix2 + bix+ci, xi-1£x£xi+1 (9)

содержит коэффициенты ai, bi, ci для определения которых необходимы три уравнения. Ими служат условия для прохождения параболы (1) через три точки (xi-1, yi-1), (x, yi), (xi+1, yi+1). Эти условия можно записать в виде:

aixi-12 + bixi-1 + ci = yi-1 

                                     aixi2 + bixi + ci = yi                        (10)

aixi+12 + bixi+1 + ci = yi+1 

Отсюда находятся коэффициенты ai, bi, ci:

,           (11)

,   (12)

где h=(xi+1-xi+1)/2.

Таким образом, абсцисса точки минимума

xm=-b/(2c)      (13)

 Интерполяция для любой точки  проводится по трем ближайшим  к ней узлам. 

 

.

 

 

 

 

 

 

 

 

 

 

 

3. Алгоритмизация задачи

 

В соответствии с постановленной в разделе 2 задачей  целесообразно реализовать алгоритм, использующий обращение к соответствующим  подпрограммам из головной программы.

Алгоритм  работы головной программы следующий:

  1. Скрыть курсор с использованием подпрограммы - процедуры скрытия курсора и вывести в специальном окне заставку программы, содержащую сведения о назначении программы, исполнителе и руководителе курсовой работы, а также подсказку для пользователя о последующих действиях, с использованием подпрограммы - процедуры заставки.
  2. Запустить подпрограмму-процедуру вертикального меню при нажатии  любой клавиши .
  3. Запустить подпрограмму-процедуру справки и вывести в специальном окне справочные сведения о работе с программой при выборе пункта меню «Справка» с использованием  строки-подсказки о возврате в меню.
  4. Запустить подпрограмму-процедуру ввода  начальных условий: h-начального шага,  (x1, x2 , x3 )-начальных значений и точности результата-e. 
  5. Запустить подпрограмму-процедуру поиска минимума функции и вывода результатов вычислений, а также строки-подсказки о возврате в меню.
  6. Завершить работу программы при выборе пункта меню «Выход».

 

Алгоритм нахождения минимума функции методом координатного спуска в подпрограмме-процедуре включает следующие шаги:

  1. Создать окно для ввода исходных данных и вывода результатов вычисления.
  2. В подпрограмме-процедуре организовать ввод значений: начального шага поиска(δ=h), точности результата(е), в цикле ввести начальные значения xi (i=1…2);
  3. Вычислить значения функции в подпрограмме-функции в начальных заданных точках F(X1+h,...,Xi,...,Xn);
  4. Проверяем условие : если F(X1,...,Xi,...,Xn)- F(X1+h,...,Xi,...,Xn)<0, то переходим к п.4 и увеличиваем следующее начальное значение на шаг h: xi=xi+h;
  5. Если не выполняется п.5, то меняем знак на противоположный и уменьшаем шаг на коэффициент R: h:=-h/R;
  6. Проверяем условие: если |h|>e/5 , то идём к п.5;
  7. Вывести результаты вычислений в том же окне;
  8. Вывести в окне запрос о переходе к меню;

 

Алгоритм нахождения минимума функции методом квадратичной интерполяции-экстраполяции в подпрограмме-процедуре включает следующие шаги:

1.Создать окно для ввода исходных данных и вывода результатов вычисления.

2. В подпрограмме-процедуре организовать ввод значений: начального шага поиска(δ=h), точности результата(е), в цикле ввести начальные значения xi (i=1…2);

3.   Организовываем цикл

     for i:=1 to n do

  1. Вычисляем  два смежных  значения  аргумента F(x): x0=xi-h и x2=xi+h.
  2. Вычисляем три значения F(x): F(x0)=F0 , F(xi)=Fi и F(x2)=F2.
  3. Вычисляем коэффициенты:

C=1/2h2*(F0-2Fi+F2),

D=((-F0(2xi+h)+4Fixi-F2(2xi-h)))/2h2,

и по ним  вычисляем аналитически положение  экстремума:

xmi=-D/2C; 

  1. Проверяем условие (xmi-xi)<E. Если оно выполняется , задаём xi=xmi и идём к п.3. Если выполняется то считаем xmi найденным с заданной точность E, вычисляем F(xm) и останавливаем счет.
  2. Вывести результаты вычислений в том же окне;
  3. Вывести в окне запрос о переходе к меню;
Программа нахождения минимума функции двух переменных