2013-03-19 2 views
2

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

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

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

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

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

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

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

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

+3

Нелинейные задачи только сходятся к локальному минимуму. Чтобы сходиться к глобальному минимуму, вы должны обеспечить хорошее начальное предположение. – Justin

+0

Вы пытались добавить свои предположения к модели? Например, добавьте ограничение, которое делает размеры x равными. – nneonneo

+0

@nneonneo да, у меня есть, и это, похоже, не помогает. Мой вопрос скорее о том, есть ли условия, при которых алгоритмы доверия доверия, используемые fsolve, как известно, терпят неудачу – George

ответ

1

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

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

  • Знайте, что ваше начальное предположение хорошо

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

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

  • Измените функцию затрат для удаления локальных минимумов

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

Смежные вопросы