Отражающий метод доверительной области для 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