fsolve в Matlab сходится *но* кажется, дает неправильное решение

Я пытаюсь решить систему нелинейных уравнений, используя fsolve; скажем

F(x;lambda) = 0, где lambda — это вектор параметров, а x — вектор, который я хочу найти.

Я использую fsolve от Matlab.

У меня есть 2 значения параметра лямбда, для которых я хочу решить систему. Для одного значения лямбда я получаю решение, которое выглядит нормально.

Для другого значения лямбда я снова получаю решение (matlab выходит с флагом 1. Однако я знаю, что это не фактическое решение. Например, я знаю, что некоторые измерения x должны быть равны друг другу, и это это не так в решении, которое я получаю от fsolve.

Я пробовал как доверительную область, так и алгоритм Левенберга-Марквардта, и я не получаю лучших результатов. (явное обеспечение того, чтобы эти x были одинаковыми, по-прежнему, кажется, дает решения, которые не согласуются с тем, что я ожидал от свойств системы)

Мой вопрос: зависят ли алгоритмы, используемые fsolve, от какой-либо стабильности системы? Может ли быть так, что изменение параметра lambda во втором случае, о котором я упоминал выше, делает систему нестабильной, и может ли это затруднить правильное решение fsolve?

Спасибо, Джордж.


person George    schedule 19.03.2013    source источник
comment
Нелинейные задачи сходятся только к локальному минимуму. Чтобы сходиться к глобальному минимуму, вы должны предоставить хорошее начальное предположение.   -  person Justin    schedule 19.03.2013
comment
Вы пытались добавить свои предположения в модель? Например, добавьте ограничение, которое делает размеры x равными.   -  person nneonneo    schedule 19.03.2013
comment
@nneonneo да, у меня есть, и, похоже, это не помогает. Мой вопрос больше о том, существуют ли условия, при которых известно, что алгоритмы доверенной области, используемые fsolve, терпят неудачу.   -  person George    schedule 19.03.2013


Ответы (1)


fsolve не «не работает» - как прокомментировал jucestain, он дает вам локальный минимум, который не обязательно является глобальным минимумом. Это то, для чего он предназначен.

Чтобы повысить свои шансы на получение глобального минимума, вам необходимо:

  • Знайте, что ваша первоначальная догадка хороша

  • Запустите оптимизацию несколько раз с сеткой начальных предположений и выберите лучший результат.

  • Добавьте ограничения, чтобы предотвратить отклонение решателя в областях, которые, как вы знаете, имеют локальные минимумы.

  • Измените функцию стоимости, чтобы удалить локальные минимумы

Если вы когда-нибудь встретите нелинейный решатель, который может гарантировать глобальный минимум, сообщите нам об этом!

person pancake    schedule 02.04.2013