Отражающий метод доверительной области для fmincon может обработать линейные ограничения равенства, если никакие другие ограничения не существуют. Предположим, что вы хотите минимизировать
подвергните некоторым линейным ограничениям равенства. Целевая функция закодирована в функциональном brownfgh.m. Этот пример берет n = 1000. Кроме того, файл browneq.mat содержит матрицы Aeq и beq, которые представляют линейные ограничения Aeq · x = beq. Aeq имеет 100 строк, представляющих 100 линейных ограничений (таким образом, Aeq 100 1000 матрица).
Файл длинен, так не включен здесь. Просмотрите код с командой
type brownfgh
Поскольку brownfgh вычисляет градиент и значения Гессиана, а также целевую функцию, необходимо использовать optimoptions, чтобы указать, что эта информация доступна в brownfgh, с помощью опций Hessian и SpecifyObjectiveGradient.
Разреженная матрица Aeq и векторный beq доступна в файле browneq.mat:
load browneq
Линейная ограничительная система 100 1000, не структурировал разреженность (используйте spy (Aeq), чтобы просмотреть структуру разреженности), и не слишком ужасно плохо обусловлено:
condest(Aeq*Aeq') ans = 2.9310e+006
fun = @brownfgh;
load browneq % Get Aeq and beq, the linear equalities
n = 1000;
xstart = -ones(n,1); xstart(2:2:n) = 1;
options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'HessianFcn','objective',...
'Algorithm','trust-region-reflective');
[x,fval,exitflag,output] = ...
fmincon(fun,xstart,[],[],Aeq,beq,[],[],[],options);fmincon распечатывает следующее выходное сообщение:
Local minimum possible. fmincon stopped because the final change in function value relative to its initial value is less than the default value of the function tolerance.
Значение exitflag 3 также указывает, что алгоритм остановился, потому что изменение в значении целевой функции было меньше, чем допуск FunctionTolerance. Итоговое значение функции дано fval. Ограничения удовлетворены, как вы видите в output.constrviolation
exitflag,fval,output.constrviolation
exitflag =
3
fval =
205.9313
ans =
2.2071e-13Линейные равенства удовлетворены в x.
norm(Aeq*x-beq)
ans =
1.1858e-12