- •Методы конечномерной оптимизации
- •390005, Рязань, ул. Гагарина, 59/1.
- •Лабораторная работа № 1 Методы одномерной оптимизации
- •1. Краткие теоретические сведения
- •1.1. Метод золотого сечения
- •1.3. Методы с использованием производных
- •2. Исходные данные
- •3. Порядок выполнения работы
- •4. Содержание отчета
- •Лабораторная работа № 2 Методы безусловной оптимизации функций многих переменных
- •3. Порядок выполнения работы
- •4. Содержание отчета
- •Лабораторная работа № 3 Линейное программирование
- •1. Краткие теоретические сведения
- •Теорема о существовании решений. Задача линейного программирования вида (3.1) или (3.3) имеет решение тогда и только тогда, когда допустимые множества прямой и двойственной задачи не пусты, т.Е.
- •2. Содержание работы
- •3. Порядок выполнения работы
- •4. Содержание отчета
- •Лабораторная работа № 4 Дискретное программирование
- •2. Порядок выполнения работы
- •3. Содержание отчета
3. Порядок выполнения работы
3.1. Работа выполняется в среде Matlab.
Для запуска системы Matlab щелкнуть левой кнопкой мыши по ярлыку с логотипом Matlab на рабочем столе Windows. Появляется командное окно с командной строкой.
3.2. Найти параметры производственной функции Кобба- -Дугласа по данным табл. 2.1, используя пакет оптимизации системы Matlab - Optimization Toolbox.
Для этого вводятся обозначения для элементов табл. 2.1 по следующей схеме
и составляется квадратичный критерий качества (целевая функция) исходя из наблюдений за 12 лет
. (2.1)
Параметры , при которых критерий качества достигает минимума, считаются наилучшими (оптимальными).
3.2.1. Найти параметры производственной функции с помощью процедуры fminunc, которая предназначена для поиска минимума функции многих переменных без ограничений
Запись функции:
х= fminunc(fun, x0).
Она возвращает значение точки минимума функции fun при начальном приближении х0.
Предварительно создается m–файл-функция. На панели инструментов окна Matlab щелкнуть New \M-file. В появившемся окне набрать текст программы, описывающей формирование целевой функции (2.1):
function F=myfun(x)
Y=[180.0 197.0 215.5 230.7 245.0 251.5 284.0 304.4 336.0 368.7 393.0 426.0];
К=[151 166.7 189.0 212.5 237.6 265.0 283.0 316.0 353.0 398.4 455.7 520.0];
L=[1863 1931 1971 2031 2162 2277 2457 2601 2798 2983 3110 3268];
t=1:12;
S(t) = (Y(t)-x(1)*K(t).^x(2).*L(t).^(1-x(2))).^2;
F=sum(S);
В этой программе через обозначена невязка для момента времени , а через - функция (2.1). Сохраняется файл-функция под именем myfun.
Затем составляется m–файл–сценарий:
% Program нахождение параметров производственной функции
х0 = [0.1 0.5]; % Задание начального приближения
[х, resnorm,exitflag, output] =fminunc(@myfun,x0) % Решение задачи.
При нажатии клавиши F5 в командном окне появляется сообщение о решении задачи:
х = 0.2752 0.4040 resnorm = 267.7279
exitflag = 1
output =
iterations: 18 funcCount: 93 stepsize: 1.0001 firstorderopt: 0.1673 algorithm: 'medium-scale: Quasi-Newton line search'.
Здесь resnorm - значение функции (2.1) в точке минимума; exitflag - сообщение о характере завершения вычислительной процедуры. Если эта величина положительна, вычисления закончились нахождением решения; если она равна нулю, то останов произошел по исчерпанию лимита итераций; если данная величина отрицательная - решение не найдено. Величина iterations показывает число итераций процедуры оптимизации; funcCount — число вычислений функции; stepsize - величина конечного шага поиска; firstorderopt — показывает норму градиента в конечной точке поиска.
Оценить качество оптимизации можно по величине resnorm - сумме квадратов невязок или визуально на графике. Для этого в командной строке Matlab или в файле–сценарии следует набрать
t=1:12;
plot(t,Y(t),t,x(1)*K(t).^x(2).*L(t).^(1-x(2)))
и нажать клавишу Enter или F5. Полученный график сохранить.
3.2.2. Решить задачу методом Нелдера-Мида, используя функцию fminsearch, которая имеет ту же структуру, что и рассмотренная в п. 3.2.1. Сравнить полученные результаты.
3.2.3. Найти параметры производственной функции квазиньютоновским методом с помощью процедуры fminunc,
Предварительно вычисляется градиент целевой функции, после чего составляется m–файл–функция
function [F,G] = myfunGr(x)
Y=[180.0 197.0 215.5 230.7 245.0 251.5 284.0 304.4 336.0 368.7 393.0 426.0];
К=[151 166.7 189.0 212.5 237.6 265.0 283.0 316.0 353.0 398.4 455.7 520.0];
L=[1863 1931 1971 2031 2162 2277 2457 2601 2798 2983 3110 3268];
t=1:12;
S1(t) = (Y(t)-x(1)*K(t).^x(2).*L(t).^(1-x(2))).*K(t).^x(2).*L(t).^(1-x(2));
S2(t) = (Y(t)-x(1)*K(t).^x(2).*L(t).^(1-x(2))).*K(t).^x(2).*L(t).^(1-
- x(2))*x(1).*(log(K(t))-log(L(t)));
S(t)= (Y(t)-x(1)*K(t).^x(2).*L(t).^(1-x(2))).^2;
dF1 = -2*sum(S1);
F=sum(S);
dF2 = -2*sum(S2);
G = [dF1 dF2];
Здесь символом обозначается производная невязки по переменной , символом - производная невязки по переменной , символом - производная целевой функции (2.1) по переменной , символом - производная целевой функции (2.1) по переменной .
Затем, как и ранее, составляется m–файл–сценарий:
х0 = [0.1 0.5];
OPTIONS = optimset('gradobj','on');
[x,fval,exitflag,output] = fminunc(@myfunGr,xO,OPTIONS)
Проанализировать сообщение о решении задачи и зафиксировать результаты в протоколе.
3.2.4. Решить задачу нелинейным МНК с помощью функции Isqnonlin.
Для этого скорректировать m–файл–функцию п. 3.2.1, строки 6,7 выражением:
F=(Y(t)-x(1)*K(t).^ x(2).*L(t).^ (1-x(2))).^2;
В m–файле–сценарии производится запись:
[x,resnorm,residual,exitflag,output]=lsqnonlin(@myfun_MHK,x0)
Результаты фиксируются в протоколе.