Page 25 - 6416
P. 25
За допомогою вбудованої функції quadprog у системі MatLab можна розв’язати задачу
квадратичного програмування.
Синтаксис
[x,fval]= quadprog(H,f,A,b,Aeq,beq,lb,ub),
де f= a ; H - матриця розміром n n , яка повинна бути додатно означена, що гарантує
існування єдиного розв’язку задачі квадратичного програмування. Інші аргументи мають
такий же зміст, як і відповідні аргументи у вбудованій функції linprog.
*
Вбудована функція quadprog повертає вектор x і значення цільової функції
при виконанні лінійних обмежень типу нерівностей і рівностей та за умови, що
fval R x *
змінна x не виходить за задані межі.
У нашому випадку
14 4 1 0 8 2
f a , D , A 1 2 , b , lb . Отже, H .
9
0
54 1 6 2 16
Тепер можемо написати програму для розв’язання задачі квадратичного програмування.
%===============================
%Квадратичне програмування
%===============================
%Вхід
%f-вектор коефіцієнтів цільової
%функції при змінних xj
%А-матриця коефіцієнтів при
%змінних xj у лівих частинах
%обмежень-нерівностей
%b-вектор, компоненти якого
%праві частини обмежень-нерівностей
%Aq-матриця коефіцієнтів при
%змінних xj у лівих частинах
%обмежень-рівностей
%bq-вектор, компоненти якого
%праві частини обмежень-рівностей
%Вихід
%x-вектор оптимальних змінних xj
%fval-оптимальне значення цільової функції
%-----------------------------------------
H=[8 -2;-2 12];
f=[-14;-54];
A=[1 2];
b=9;
lb=zeros(2,1);
opts = optimset('Algorithm','active-set');
[x,fval]=quadprog(H,f,A,b,[],[],lb,[],[],opts);
Обчислення за наведеною програмою дали такі результати:
x =
23/13
47/13
>> fval
fval =
-1844/13
Отриманий результат повністю співпадає з розв’язком задачі квадратичного
програмування отриманий нами раніше.
22