Министерство образования и науки Российской Федерации
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Факультет экономики и управления
Кафедра математических методов и моделей в экономике
ОТЧЕТ
по учебной-вычислительной практике
на базе кафедры математических методов и моделей в экономике
ГОУ ОГУ 080116.65.9011.06 П
Руководители от кафедры:
профессор, заведующий кафедры ММиМЭ А.Г. Реннер
ассистент кафедры ММиМЭ Р.М. Шаяхметова
ассистент кафедры ММиМЭ Т.А. Зеленина
Исполнители:
Студент группы 09 ММЭ Д.А. Евдокимов
Оренбург 2011
Содержание
1. Задание на практику
. Безусловная минимизация функции многих переменных
.1 Минимизация функции вдоль заданного направления
.2 Градиентный метод наискорейшего спуска
.3 Метод сопряженных градиентов
.4 Блок-схема алгоритма минимизации
2.5 Листинг программы «Безусловная минимизация функции»
1. Задание на практику
Разработать программное обеспечение, реализующее нахождение минимального значения заданной функции многих переменных и её точку минимума методом сопряжённых градиентов.
2. Безусловная минимизация функции многих переменных
Метод сопряжённых градиентов является быстросходящимся методом, но он сходится только из начальных точек, достаточно близких к точке минимума.
Начальное приближение следует найти с помощью процедуры, реализующей метод наискорейшего спуска (использующей процедуру минимизации вдоль заданного направления). Затем следует уточнить точку минимума при помощи процедуры, реализующей метод сопряжённых градиентов (использующей процедуру минимизации вдоль заданного направления). При этом необходимо учесть возможность того, что значения переменных и самой функции могут иметь разные масштабы (использовать масштабирующие коэффициенты и относительные критерии останова).
.1 Минимизация функции вдоль заданного направления
Численное решение задачи одномерной минимизации:
Имеем некоторую начальную точку и вектор направления . Требуется с заданной точностью ? найти точку минимума функции в данном направлении и минимизирующее функцию значение ?.
С помощью метода удвоения шага локализуем интервал, на котором находится ?min. Суть метода удвоения шага состоит в том, что мы выбираем некоторое начальное значение ? (в данном случае выберем нулевое) и некоторую величину шага h. Следующую точку итерационной последовательности ?i находим по формуле ?i=?i-1+2i-1*h. Затем вычисляем хi=х0+?ih. Итерации продолжаем до тех пор, пока не выполнится условие f(хi)>f(хi-1). При выполнении этого условия полагаем ?min=[?i-2; ?i].
Затем уточним границы интервала (и, соответственно, приближённое значение точки минимума) с помощью одного из быстросходящихся методов. Например, с помощью метода золотого сечения.
Суть метода золотого сечения состоит в использовании одноимённой пропорции. Точка на отрезке является его «золотым сечением», если она делит отрезок так, что его большая часть соотносится с ним самим так же, как и меньшая часть с большей. На отрезке существует две таких точки. Обозначим их ?(1) и ?(2). Пусть a,b - левая и правая границы отрезка соответственно, тогда их координаты можно выразить, используя формулы . Находя х(1)=х0+?(1)h и х(2)=х0+?(2)h, сравниваем f(х(1)) и f(х(2)). Если f(х(1))>f(х(2)), то . Если f(х(1))
.2 Градиентный метод наискорейшего спуска
Имеем оптимизационную задачу минимизации функции: , где . Каждое следующее приближение находим по формуле . Если вектор hk равен антиградиенту функции в точке хk, а ?k выбирается из условия , то мы имеем метод наискорейшего спуска.
Метод наискорейшего спуска является методом первого порядка, так как использует информацию о значении первых производных функции. К группе таких методов относятся различные градиентные методы.
Градиентные методы представляют собой методы спуска, в которых в качестве направлений убывания выбирается направление антиградиента функции:-grad
В качестве абсолютного критерия останова обычно выбирают либо неравенство (критерий сильной сходимости) или ?grad?. В качестве относительного критерия останова обычно выбирают либо , либо .
С помощью метода минимизации функции вдоль заданного направления осуществляется поиск минимума из заданной точки. В методе наискорейшего спуска в качестве вектора направления используют вектор антиградиента.
Метод наискорейшего спуска требует решения на каждом шаге задачи одномерной оптимизации , т.е. из точки будем двигаться в направлении антиградиента до тех пор, пока не достигнем минимума функции на этом направлении.
Сходимость метода наискорейшего спуска зависит от отношения максимального и минимального собственных чисел в окрестности точки экстремума. Чем больше это отношение, тем хуже сходимость метода.
При нахождении решения задачи градиентными методами итерационный процесс продолжается до тех пор, пока не выполнится выбранный критерий останова.
Геометрическая иллюстрация метода представлена на рисунке 1.
Рисунок 1 - геометрическая иллюстрация метода наискорейшего спуска
.3 Метод сопряженных градиентов
Метод сопряжённых градиентов - итерационный метод для безусловной оптимизации в многомерном пространстве. Основным достоинством метода является то, что он решает квадратичную задачу оптимизации за конечное число шагов. Однако, этот работоспособность этого метода зависит от начального приближения. Поэтому перед применением метода сопряжённых градиентов находят точку начального приближения с помощью, например, метода наискорейшего спуска.
Рассмотрим следующую частную задачу оптимизации:
Здесь - симметричная положительно определённая матрица размера . Такая задача оптимизации называется квадратичной. Имеем последовательность точек хi=хi-1+?di-1, где ? выбирается из условия , а направление d - по правилу , где . Для квадратичной функции метод сопряжённых градиентов сходится за n шагов, где n - число переменных в функции.
В общем случае (неквадратичная функция) для задачи минимизации имеем , если и , если
В качестве абсолютного критерия останова обычно выбирают либо неравенство (критерий сильной сходимости) или ?grad?. В качестве относительного критерия останова обычно выбирают либо , либо .
Рисунок 2 - Геометрическая иллюстрация метода сопряженных градиентов
2.4 Блок-схема алгоритма минимизации
.5 Листинг программы «Безусловная минимизация функции»
алгоритм сопряженный градиент минимизация
unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, XPMan;= class(TForm): TButton;: TLabel;: TEdit;: TXPManifest;: TLabel;: TEdit;: TButton;: TButton;: TLabel;: TEdit;: TEdit;: TListBox;: TLabel;: TEdit;: TListBox;: TButton;: TButton;: TLabel;: TListBox;: TButton;: TButton;: TEdit;: TLabel;Button4Click(Sender: TObject);Button5Click(Sender: TObject);Button1Click(Sender: TObject);btn1Click(Sender: TObject);btn3Click(Sender: TObject);btn2Click(Sender: TObject);btn4Click(Sender: TObject);
{ Private declarations }
{ Public declarations };nvar=5;x,x0,x00,xleft,d:array [0..(nvar-1)] of real;,h,lam0: real;:integer;,tipich: array [0..nvar-1] of real; //Коэф-ты масштабирования и типичные значения х и ф-ции: TForm1;
{$R *.dfm}myfunc(x: array of real):real;:=sqr(x[0])+2*x[0]+2*sqr(x[1])+4*x[1]+5;;FindAlpha(x0,d:array of Real; h,eps:real; n:integer; var lam0:real);lam: array [1..3] of real;:integer;newlam;[1]:=lam[2];[2]:=lam[3];[3]:=lam[3]+h;:=2*h;;newx;i:integer;;i:=0 to (n-1) do[i]:=x0[i]+d[i]*lam[3];;FindInterval;i:Integer;myfunc(x)>myfunc(x0) then begin:=-h;;;myfunc(x)v then chosen:=2;u=v then chosen:=3;;zollam; //Считаем новые лямбдаchosen=1 then begin[3]:=lam2;:=lam1;:=lam[3]-0.618*(lam[3]-lam[1]);;chosen=2 then begin[1]:=lam1;:=lam2;:=lam[1]+0.618*(lam[3]-lam[1]);;chosen=3 then begin[1]:=lam1;[3]:=lam2;:=lam[3]-0.618*(lam[3]-lam[1]);:=lam[1]+0.618*(lam[3]-lam[1]);;;makestop:boolean;norm:real;:integer;relxnorm(x1,x2:array of real):real;relx:array [0..nvar-1] of real;:integer;:real;k:=0 to (n-1) do begin[k]:=abs(x2[k]-x1[k]);abs(x2[k])>tipich[k] then relx[k]:=relx[k]/abs(x2[k])relx[k]:=relx[k]/tipich[k];;:=0;k:=0 to (n-1) do:=norme+sqr(relx[k]);:=sqrt(norme);:=norme; ;(lam1,lam2);i:=0 to (n-1) do begin[i]:=x0[i]+d[i]*lam[1];[i]:=x0[i]+d[i]*lam[3];;relxnorm(xleft,x)tipich[n] then g:=abs(g)g:=tipich[n];i:=0 to (n-1) do begin[i]:=abs(-agrad[i]);abs(x[i])>tipich[i] then gradtole[i]:=gradtole[i]*abs(x[i])gradtole[i]:=gradtole[i]*tipich[i];[i]:=gradtole[i]/g;;:=gradtole[0];i:=0 to (n-1) dogradnormtipich[n] then g:=abs(g)g:=tipich[n];i:=0 to (n-1) do begin[i]:=abs(-agrad[i]);abs(x[i])>tipich[i] then gradtole[i]:=gradtole[i]*abs(x[i])gradtole[i]:=gradtole[i]*tipich[i];[i]:=gradtole[i]/g;;:=gradtole[0];i:=1 to (n-1) dogradnorm