Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУЛР.doc
Скачиваний:
11
Добавлен:
19.11.2019
Размер:
1.12 Mб
Скачать

Лабораторная работа № 2 Методы безусловной оптимизации функций многих переменных

Цель работы: ознакомление с методами безусловной оптимизации функций в среде Matlab.

1. Краткие сведения о пакете оптимизации Optimization Toolbox системы MATLAB.

Пакет оптимизации (Optimization Toolbox) — это библиотека функций, расширяющих возможности системы MATLAB по численным вычислениям, предназначенная для решения задач оптимизации и систем нелинейных уравнений [2]. Поддерживает основные методы оптимизации функций многих переменных.

  • Безусловная оптимизация нелинейных функций.

  • Метод наименьших квадратов.

  • Решение нелинейных уравнений.

  • Линейное программирование.

  • Квадратичное программирование.

  • Условная минимизация нелинейных функций.

  • Методы минимакса.

  • Многокритериальная оптимизация.

Рассматриваемый пакет дает возможности решать задачи миними­зации функций, нахождения решений уравнений, задачи аппрокси­мации («подгонки» кривых под экспериментальные данные).

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

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

х = fminunc(fun, x0)

х = fminunc(fun, x0, options)

х = fminunc (fun, x0, options, PI, P2,...)

[x, fval] = fminunc (...)

[x, fval, exitflag] = fminunc (…)

[x, fval, exitflag, output] =fminunc(...)

[x, fval, exitflag, output, grad] = fminunc (...)

[x,fval, exitflag, output, grad, Hessians] = fminunc (...)

Аргументы функции:

  • fun - скалярная функция, которая задается либо с помощью процедуры inline, например:

fun=inline(‘sin(x)’);

либо в виде m – файла – функции, например:

function F=myfun(x)

F=…

  • Задание градиента

options=optimset(‘GradObj’, ‘on’)

В этом случае m – файл должен возвращать не только значение функции F,

но и значение градиента G:

function [F, G]=myfun(x)

F=… % Вычисление функции

G=… % Вычисление градиента

  • Задание гессиана (матрицы Гессе)

options=optimset (‘Hessian’, ‘on’)

function [F, G, H]=myfun(x)

F=… % Вычисление функции

G=… % Вычисление градиента

H=… % Вычисление гессиана

  • Options - опции (их можно изменять, используя функцию optimset):

  • Diagnostics - вывод диагностической информации о миними­зируемой функции;

  • Display - уровень отображения: ‘off ‘ - вывод информации отсутствует, 'iter' - вывод информации о поиске решения на каждой итерации, 'final' - вывод только итоговой информа­ции;

  • GradObj - использование градиента для целевой функции, опре­деляемого пользователем (возможные значения - 'off и 'on');

  • MaxFunEvals - максимальное число вычислений функции;

  • Maxlter - максимальное допустимое число итераций;

  • TolFun - допуск останова вычислений по величине изменений функции;

  • Tolx - допуск останова вычислений по величине изменений х;

  • exitflag - информация о характере завершения вычислений: если эта величина положительна, то вычисления завершились нахож­дением решения х, если она равна нулю, то останов произошел в результате выполнения предельного числа итераций, если данная величина отрицательна, то решение не найдено;

  • output - информация о результатах оптимизации:

  • output.iterations – число выполненных итераций;

  • output.funcCount – число вычислений функции;

  • output.algorithm – используемый алгоритм;

  • output.stepsize – величина конечного шага поиска (алгоритм средней размерности);

  • output.firstorderopt – норма градиента в точке минимума (алгоритм большой размерности).

Функция fminsearch – реализует метод Нелдера – Мида и предназначена для решения задач безусловной оптимизации.

Формы записи функции:

х = fminsearch(fun, x0)

х = fminsearch(fun, x0, options)

х = fminsearch (fun, x0, options, PI, P2,...)

[x, fval] = fminsearch (...)

[x, fval, exitflag] = fminsearch (…)

[x, fval, exitflag, output] =fminsearch(...)

Набор опций в данном случае такой же, как и у функции fminunc.

Функция fminbnd - функция скалярной нелинейной минимизации с ограни­чениями вида . Алгоритм базируется на методе золотого сечения и квадратичной (параболической) интерполяции. Запись функции:

х=fminbnd(fun,xl,x2)

x=fminbnd (fun,xl, x2, options)

x=fminbnd (fun, xl, x2, options, PI, P2, ...)

[x, fval] = fminbnd (…)

[x, fval, exitflag] = fminbnd (...)

[x, fval, exitflag, output] = fminbnd (...)

Аргументы и возвращаемые величины практически аналогичны рассмотренным для предыдущей функции за тем исключением, что число опций здесь меньше: возможны только опции Display, MaxFunEvals, MaxIter и Tolx.

Функция Isqcurvefit возвращает решение задачи аппроксимации (нелинейной «подгонки» кривой) под имеющиеся экспериментальные данные xdata, ydata, иначе говоря, возвращает параметры функции заданного вида, обеспечивающие ее наименьшее среднеквадратическое отклонение от указанных данных.

Формы записи:

х = Isqcurvefit (fun, x0, xdata,ydata)

х = Isqcurvefit (fun, x0, xdata,ydata,lb,ub)

х = Isqcurvefit (fun, x0, xdata,ydata,lb,ub,options)

х = Isqcurvefit (fun, x0, xdata,ydata,lb,ub,options,P1,P2)

[x,resnorm] = Isqcurvefit (…)

[x,resnorm,residua] = Isqcurvefit (…)

[x,resnorm,residua,exitflag,] = Isqcurvefit (…)

[x,resnorm,residua,exitflag,output] = Isqcurvefit (…)

[x,resnorm,residua,exitflag,output,lambda] = Isqcurvefit (…)

Аргументы, опции, возвращаемые величины – такие же, как у ранее рассмотренных функций.

Функция Isqnonlin возвращает решение задачи нелинейного МНК:

.

Формы записи:

х = Isqnonlin(fun, x0)

х = Isqnonlin(fun, x0,lb,ub)

х = Isqnonlin(fun, x0,lb,ub,options)

х = Isqnonlin(fun, x0,lb,ub,options,P1,P2)

[x,resnorm] = Isqnonlin(…)

[x,resnorm,residua] = Isqnonlin(…)

[x,resnorm,residua,exitflag] = Isqnonlin (…)

[x,resnorm,residua,exitflag,output] = Isqnonlin(…)

[x,resnorm,residua,exitflag,output,lambda] = Isqnonlin(…)

Функция Isqnonneg возвращает решение задачи линейного МНК вида:

,

где , - вектор наблюдений.

Формат записи:

х = Isqnonneg(H,y)

х = Isqnonneg(H,y,x0)

х = Isqnonneg(H,y,x0,options)

[x,resnorm] = Isqnonneg(…)

[x,resnorm,residua] = Isqnonneg(…)

[x,resnorm,residua,exitflag] = Isqnonneg(…)

[x,resnorm,residua,exitflag,output] = Isqnonneg(…)

[x,resnorm,residua,exitflag,output,lambda] = Isqnonneg(…)

2. Исходные данные. В табл. 2.1 приведены показатели промышленного развития страны за определенный временной интервал (первая строка), используемые для оценки параметров производственной функции. Во второй строке указаны объемы производства , в третьей строке - стоимости основных фондов и в четвертой - число занятых в промышленности рабочих .

Таблица 2.1 (вариант 1)

Таблица 2.1 (вариант 2)

Таблица 2.1 (вариант 3)

Таблица 2.1 (вариант 4)