Вычислительный алгоритм метода "Наискорейшего спуска" с тестированием на функции Розенброка

Программный продукт, реализующий алгоритм метода "Наискорейшего спуска" с тестированием на функции Розенброка в среде DELPHI. Разработка интерфейса пользователя и модуля графического отображения поиска решения. Апробация алгоритма на тестовых примерах.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 07.08.2013
Размер файла 846,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ ИМЕНИ АКАДЕМИКА С.П. КОРОЛЕВА (НИУ)

Факультет летательных аппаратов

Кафедра летательных аппаратов

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

К индивидуальному заданию по профессионально-ознакомительной практике

Выполнил студент

Резинкина В.А.

Самара 2011

Задание

Разработать вычислительный алгоритм метода «Наискорейшего спуска» с тестированием на функции Розенброка.

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

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

Разработать модуль графического отображения поиска решения.

Апробировать алгоритм на тестовых примерах.

Записать программный продукт на диск.

Оформить описание разработки в соответствии с СТП СГАУ.

вычислительный алгоритм функция розенброк delphi

Реферат

Градиент, метод квадратичной интерполяции, множители лагранжа, метод одномерного поиска.

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

Содержание

Введение

1. Математическая часть задачи

2. Тестовый расчет

2.1 Назначение тестовой функции и ее форма

3. Алгоритм работы программы

4. Руководство пользователя

Заключение

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

Приложение А

Введение

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

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

Сходимость метода градиентного спуска зависит от отношения максимального и минимального собственных чисел матрицы Гессе в окрестности минимума (максимума). Чем больше это отношение, тем хуже сходимость метода.

Методом наискорейшего спуска может быть найден минимум функции n переменных F(x1, . . . ,xn) или найдены решения системы уравнений вида:

Fi(x1,x2, . . .,xn)=0, i=1, . . ,n.

Алгоритм наискорейшего спуска реализует итерационную процедуру движения к минимуму из произвольно выбранной точки начального приближения в направлении наиболее сильного уменьшения функции, определенном в окрестности текущего значения аргумента минимизируемой функции. Такое направление противоположно направлению, задаваемому вектором градиента минимизируемой функции F(x1, . . . ,xn)

1. Математическое описание

Основной целью программы является вычисление экстремума функции.

В методе наискорейшего спуска в качестве направления поиска минимума заданной функции выбирается вектор, направление которого противоположно направлению вектора градиента функции F(X), где X=x1, x2, x3, … xn. Координаты этого вектора :

В математическом анализе доказывается, что вектор gradF(X) характеризует направление наиболее быстрого возрастания функции. Поэтому вектор - gradF(X) (антиградиента) является направлением наиболее быстрого ее убывания. Каждое последующее приближение получается из предыдущего смещением в направлении антиградиента функции F(X) (смотри рис.1).

Рис. 1

Задавшись начальным приближением X0, ищется следующее приближение с помощью реккурентного соотношения вида:

, i=0,1,2…

Приведенное соотношение не определяет алгоритм однозначно, поскольку ничего не сказано о выборе параметра i. Например, его можно определять из условия минимума величины:

Рассматриваемая функция является функцией одного параметра и ее минимум находится или методами одномерной минимизации или решением уравнения, которое имеет вид:

,

минимальный неотрицательный корень этого уравнения и является искомым значением i.

Поиск прекращается при выполнении условия

,

так как градиент в точке минимума функции = 0, а при приближенных вычислениях .

2. Тестовый расчет

2.1 Назначение тестовой функции и ее форма

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

С целью сравнения эффективности различных алгоритмов разработаны специальные (т.наз. тестовые) функции, имеющие "неприятные" для методов поиска экстремума особенности. Одна из самых известных - функция Розенброка (автора многих популярных алгоритмов поиска экстремума).

Формула, определяющая функцию Розенброка:

Эта функция имеет крайне пологий изогнутый овраг, что сильно затрудняет поиск минимума (значение аргументов в точке минимума очевидны:

x* =1, y* = 0 (при этом f(x*,y*) = 0).

Рисунок 2 - Тестовый расчет

3. Алгоритм работы программы

Общий алгоритм работы программы представлен в виде блок-схемы на рисунке 3.

Рисунок 3 - Блок-схема программы

Подробный алгоритм работы программы представлен в виде блок-схемы на рисунке 4.

Рисунок 4 - Подробная блок-схема программы.

4. Руководство пользователя

До начала работы программы нужно выбрать, каким методом будет находиться экстремум, далее ввести начальные значения: начальный шаг, необходимую точность и начальное приближение X01 и X02 (рисунок 3).

Рисунок 5 - Панель ввода данных.

Далее нажать кнопку «Рассчитать». Для вывода расчетных данных следует нажать кнопку «Показать расчет».

Рисунок 6 - Окно программы

При необходимости тестирования программы на других функциях, следует изменить данные в function f_parab, либо в function f_rozen.

Заключение

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

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

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

Б. Банди, «Методы оптимизации» стр. 51 - 56.

В.В. Салмин, «Методы оптимального управления».

СТО СГАУ 02068410-004-2007. Общие требования к учебным текстовым документам. Самара 2007

Приложение А

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Menus;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Edit3: TEdit;

Edit4: TEdit;

Button2: TButton;

Label3: TLabel;

Label4: TLabel;

RadioGroup2: TRadioGroup;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

Label5: TLabel;

Label1: TLabel;

Label2: TLabel;

Image1: TImage;

Label6: TLabel;

RadioGroup1: TRadioGroup;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure RadioGroup1Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N7Click(Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

type fun = function (x1,x2 : double) : double;

implementation

uses Unit2;

function f_parab (x1,x2 : double) : double;

var y,alpha : double;

begin

alpha:=(25*pi)/180;

y:=((x1+3)*cos(alpha)+(x2+9)*sin(alpha))/9;

y:=y*y;

result:=y;

y:=((x2+9)*cos(alpha)-(x1+3)*sin(alpha))/25;

y:=y*y;

result:=result+y;

end;

function f_rozen (x1,x2 : double) : double;

begin

result:=100*(x2-x1*x1)*(x2-x1*x1)+(1-x1)*(1-x1);

end;

function proizv1 (x1,x2 : double; i : integer) : double;

var f : fun;

dx : double;

begin

dx:=0.00001;

if i=1 then f:=f_parab else f:=f_rozen;

result:=(f(x1+dx,x2)-f(x1,x2))/dx;

end;

function proizv2 (x1,x2 : double; i : integer) : double;

var f : fun;

dx : double;

begin

dx:=0.00001;

if i=1 then f:=f_parab else f:=f_rozen;

result:=(f(x1,x2+dx)-f(x1,x2))/dx;

end;

procedure output( i : integer; memo : TMemo; x1m,x2m,f,delta : double);

var s : string;

begin

s:='';

if i<10 then s:='0';

s:=s+inttostr(i)+') X1='+floattostrf(x1m,fffixed,4,3)+' X2='+floattostrf(x2m,fffixed,4,3)+' ';

s:=s+' F(x1,x2)='+floattostrf(f,fffixed,13,10);// Delta= '+floattostrf(delta,fffixed,13,10);

memo.Lines.Add(s);

end;

{$R *.dfm}

procedure local(d,tmp1,tmp2,chp1,chp2,x01,x02 : double; var a1,b1,a2,b2 : double; var i : integer);

var x1,x2,d1,d2 : double;

f : fun;

begin

if i = 1 then f:=f_parab

else f:=f_rozen;

x1:=x01+d*chp1;

x2:=x02+d*chp2;

if f(x01,x02)<f(x1,x2) then begin chp1:=chp1-tmp1; chp2:=chp2-tmp2; d:=-d; x1:=x01+d*chp1; x2:=x02+d*chp2; end

else begin x01:=x1; x02:=x2; x1:=x01+d*chp1; x2:=x02+d*chp2; end;

while f(x01,x02)>=f(x1,x2) do begin x01:=x1; x02:=x2; x1:=x01+d*chp1; x2:=x02+d*chp2; end;

if x1<x01 then begin a1:=x1; b1:=x01; end else

begin a1:=x01; b1:=x1; end;

if x2<x02 then begin a2:=x2; b2:=x02; end else

begin a2:=x02; b2:=x2; end;

end;

procedure TForm1.Button1Click(Sender: TObject);

var tmp1,tmp2,chp1,chp2,d,ee,x01,x02,a,b,x1,x2,x1m,x2m,x31m,x32m,a1,a2,b1,b2,delta,e,f : double;

count,k,c : integer;

flag : boolean;

begin

form2.memo1.Lines.Clear;

count:=0;

ee:=0.05;

x01:=strtofloat(edit1.Text);

x02:=strtofloat(edit2.Text);

e:=strtofloat(edit3.text);

d:=strtofloat(edit4.text);

if radiogroup1.ItemIndex=0 then k:=1 else k:=2;

if k=1 then f:=f_parab(x01,x02) else f:=f_rozen(x01,x02);

if form1.RadioGroup2.ItemIndex=0 then flag:=true else flag:=false;

chp1:=-proizv1(x01,x02,k);

chp2:=-proizv2(x01,x02,k);

delta:=sqrt((chp1)*(chp1)+(chp2)*(chp2));

while (delta>e) do

begin

local(d,tmp1,tmp2,chp1,chp2,x01,x02,a1,b1,a2,b2,k);

x1m:=(a1+b1)/2;

x2m:=(a2+b2)/2;

delta:=sqrt((chp1)*(chp1)+(chp2)*(chp2));

if k=1 then f:=f_parab(x1m,x2m) else f:=f_rozen(x1m,x2m);

output(count+1,form2.memo1,x01,x02,f,delta);

x01:=x1m;

x02:=x2m;

if (flag) then begin

chp1:=-proizv1(x01,x02,k);

chp2:=-proizv2(x01,x02,k);

end else

begin

tmp1:=chp1;

tmp2:=chp2;

chp1:=-proizv1(x01,x02,k);

chp2:=-proizv2(x01,x02,k);

tmp1:=tmp1*(chp1*chp1)/(tmp1*tmp1);

tmp2:=tmp2*(chp2*chp2)/(tmp2*tmp2);

chp1:=chp1+tmp1;

chp2:=chp2+tmp2;

end;

inc(count);

if(count>800) then exit;

if(k=2)and(f<5e-7) then exit;

end;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if form2.Visible=false then begin form2.Visible:=true; button2.Caption:='Убрать рассчет'; end

else begin form2.Visible:=false; button2.Caption:='Показать рассчет'; end;

end;

procedure TForm1.RadioGroup1Click(Sender: TObject);

begin

if radiogroup1.ItemIndex=0 then edit4.text:='0,01' else edit4.text:='0,000001';

if radiogroup1.ItemIndex=0 then edit3.text:='0,00001' else edit3.text:='0,001';

end;

procedure TForm1.N2Click(Sender: TObject);

begin

OpenDialog1.Execute;

end;

procedure TForm1.N3Click(Sender: TObject);

begin

SaveDialog1.Execute;

end;

procedure TForm1.N5Click(Sender: TObject);

begin

close;

end;

procedure TForm1.N7Click(Sender: TObject);

begin

WinHelp(Handle, 'Help.hlp', HELP_CONTEXT, 1);

end;

end.

Размещено на Allbest.ru

...

Подобные документы

  • Назначение и классификация методов поисковой оптимизации. Эффективность поискового метода. Методы поиска нулевого порядка: исходные данные, условия, недостатки и применение. Структура градиентного метода поиска. Основная идея метода наискорейшего спуска.

    лекция [137,8 K], добавлен 04.03.2009

  • Преобразование формулы и решение ее с помощью Метода Эйлера. Моделирование метода оптимизации с функцией Розенброка. Поиск модели зашумленного сигнала. Нахождение минимума заданной целевой функции методом покоординатного спуска нулевого порядка.

    курсовая работа [1,2 M], добавлен 21.12.2013

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

    курсовая работа [582,8 K], добавлен 21.01.2014

  • Последовательность проведения проверок с использованием метода ветвей и границ (как наиболее перспективного способа решения оптимизационных задач контроля), и количество повторных измерений методом наискорейшего спуска при ограничении на время проверок.

    курсовая работа [508,4 K], добавлен 01.12.2009

  • Функциональное и эксплуатационное назначение изделия. Перечень требований пользователя к программному изделию. Программные ограничения, совместимость. Требования к параметрам технических средств. Безопасность и секретность, требования к надежности.

    курсовая работа [574,6 K], добавлен 27.04.2011

  • Понятие графика функции и его представление на ЭВМ. Алгоритм реализации, блок-схема и функциональные тесты графического метода решения частного случая задачи нелинейного программирования, его математическая модель. Диалог программы с пользователем.

    курсовая работа [1,6 M], добавлен 15.05.2012

  • Решение задачи на тему максимизации функций многих переменных. Описание метода дихотомии, его применение для решения нелинейных уравнений. Решение данной задачи с использованием метода покоординатного спуска. Составление алгоритмов, листинг программы.

    курсовая работа [138,5 K], добавлен 01.10.2009

  • Оптимизация решения задачи с помощью алгоритма отжига. Анализ теории оптимизации как целевой функции. Метод градиентного спуска. Переменные и описание алгоритма отжига. Представление задачи коммивояжера через граф. Сведение задачи к переменным и решение.

    курсовая работа [784,0 K], добавлен 21.05.2015

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

    контрольная работа [473,1 K], добавлен 23.09.2010

  • Разработка алгоритма решения определенного интеграла методом трапеций для подынтегральной функции и моделирования задачи вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi и MathCad; идентификаторы, модули и приложения.

    курсовая работа [500,4 K], добавлен 28.05.2013

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

  • Программная реализация приложения для вычисления заданных функций. Процедура поиска минимума функции. Применение методов Хука-Дживса и градиентного спуска для решения задачи. Исследование функции в окрестности базисной точки, определение ее координат.

    контрольная работа [767,1 K], добавлен 02.02.2014

  • Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.

    реферат [929,8 K], добавлен 23.09.2013

  • Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.

    курсовая работа [1010,4 K], добавлен 10.08.2014

  • Разработка программы проверки знаний для тестирования студентов по программированию с кодом на языке Delphi. Проектирование визуального интерфейса и словесный алгоритм работы программы. Алгоритмы разработанных процедур и функций, инструкция пользователя.

    курсовая работа [506,5 K], добавлен 21.02.2011

  • Общие задачи линейного программирования. Описание алгоритма симплекс-метода, записанного в канонической форме с односторонними ограничениями. Алгоритм построения начального опорного плана для решения задачи. Расширенный алгоритм искусственного базиса.

    курсовая работа [142,9 K], добавлен 24.10.2012

  • Разработка программы в среде Delphi, позволяющей оперативно вести учет наличия свободных мест на авиарейсах, отправляющихся из города Саранска. Описание алгоритма решения задачи и его машинная реализация. Разработка диалогового приложения пользователя.

    курсовая работа [1,1 M], добавлен 22.03.2014

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

    курсовая работа [64,6 K], добавлен 07.05.2011

  • Delphi как строго типизированный объектно-ориентированный язык. Общее понятие о приложении "DreamBook", его главные задачи. Модель бизнес процесса. Диаграмма прецедентов: спецификация, ограничения и отношения. Модель анализа, общий алгоритм метода.

    контрольная работа [190,4 K], добавлен 22.11.2013

  • Развитие навыков работы с табличным процессором Microsoft Excel и программным продуктом MathCAD и применение их для решения задач с помощью электронно-вычислительных машин. Схема алгоритма. Назначение функции Линейн и метода наименьших квадратов.

    курсовая работа [340,4 K], добавлен 17.12.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.