Когда решатель оптимизации завершает свою задачу, он устанавливает exit flag. Выходной флаг является целым числом, которое является кодом по той причине, что решатель остановил итерации. В целом:
Положительные выходные флаги соответствуют успешным результатам.
Отрицательные выходные флаги соответствуют неудачным результатам.
Флаг нулевого выхода соответствует решателю, остановленному путем превышения предела итерации или ограничения на количество вычислений функции (см. Итерации и количество функций, а также см. Допуски и Критерий остановки).
Эта таблица ссылается на описание выходного флага каждого решателя.
Выходные флаги решателем
Примечание
Выходные флаги не являются непогрешимыми руководствами к качеству решения. Многие другие факторы, такие как параметры допуска, могут повлиять на то, является ли решение удовлетворительным для вас. Вы несете ответственность за решение, возвращает ли решатель удовлетворительный ответ. Иногда отрицательный выходной флаг не соответствует «плохому» решению. Точно так же иногда положительный выходной флаг не соответствует «хорошему» решению.
Вы получаете выходной флаг, вызывая решатель со exitflag
синтаксис. Этот синтаксис зависит от решателя. Для получения дополнительной информации см. страницы с описанием функции решателя. Для примера, для fsolve
синтаксис вызова для получения выходного флага:
[x,fval,exitflag] = fsolve(...)
В следующем примере используется этот синтаксис. Предположим, что вы хотите решить систему нелинейных уравнений
Запишите эти уравнения как анонимную функцию, которая задает нулевой вектор в решении:
myfcn = @(x)[2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
Звонить fsolve
с exitflag
синтаксис в начальной точке [-5 -5]:
[xfinal fval exitflag] = fsolve(myfcn,[-5 -5])
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient. xfinal = 0.5671 0.5671 fval = 1.0e-06 * -0.4059 -0.4059 exitflag = 1
В таблице для fsolve
exitflag
, вы находите, что значение выходного флага 1
Означает "Функция сходится к решению x
.” Другими словами, fsolve
сообщает myfcn
почти равен нулю в x
= [0.5671 0.5671]
.
Каждый решатель выдает сообщение в MATLAB® командное окно в конце итераций. Это сообщение кратко объясняет, почему решатель остановился. Сообщение может дать больше подробностей, чем выходной флаг.
Многие примеры в этой документации показывают выходные сообщения, такие как Задать и Решить задачу в командной строке. Пример в предыдущем разделе Exit Flags показывает следующее выходное сообщение:
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
Это сообщение более информативно, чем выходной флаг. Сообщение указывает, что градиент является релевантным. Сообщение также утверждает, что допуск функции управляет тем, как около 0 вектор значений функции должен быть для fsolve
считать решение завершенным.
Некоторые решатели имеют выходные сообщения, которые содержат ссылки для получения дополнительной информации. Существует два типа ссылок:
Ссылки на слова или фразы. Если щелкнуть такую ссылку, откроется окно, в котором отобразится определение термина или появится другая информация. Новое окно может содержать ссылки на документацию браузера документации для получения более подробной информации.
Ссылка как последняя линия отображения, говорящая <stopping criteria details>
. Если щелкнуть эту ссылку, MATLAB отобразит более подробную информацию о причине остановки решателя.
fminunc
решатель имеет расширенные выходные сообщения:
opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient [xfinal fval exitflag] = fminunc(@sin,0,opts)
Это дает следующие результаты:
Каждое из подчеркнутых слов или выражений содержит ссылку, которая предоставляет дополнительную информацию.
The <stopping criteria details>
ссылка печатает следующее в командной строке MATLAB:
Optimization completed: The first-order optimality measure, 0.000000e+00, is less than options.OptimalityTolerance = 1.000000e-06.
Другие ссылки открывают окно справки с определениями терминов. Для примера щелкните мышью на Local minimum found
ссылка открывает следующее окно:
Кликнув по first-order optimality measure
ссылка расширителя поднимает определение меры оптимальности первого порядка для fminunc
:
Ссылка расширителя является способом получить больше информации в том же окне. Кликнув по first-order optimality measure
ссылка расширителя снова закрывает определение.
Другие ссылки открывают Средство Просмотра.
Установите Display
опция управления внешним видом выходных сообщений и итерационного отображения. Для получения дополнительной информации смотрите Итеративное отображение. В следующей таблице показан эффект от различных настроек Display
опция.
Значение параметра отображения | Выход в командное окно | |
---|---|---|
Выходное сообщение | Итеративное отображение | |
'none' , или синонимом 'off' | Ничего | Ничего |
'final' (по умолчанию для большинства решателей) | Дефолт | Ничего |
'final-detailed' | Подробный | Ничего |
'iter' | Дефолт | Да |
'iter-detailed' | Подробный | Да |
'notify' | По умолчанию только, если exitflag ≤ 0 | Ничего |
'notify-detailed' | Подробно, только если exitflag ≤ 0 | Ничего |
Для примера,
opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton'); [xfinal fval] = fminunc(@cos,1,opts);
приводит к следующему отображению: