fsolve с границами решения - PullRequest
       3

fsolve с границами решения

3 голосов
/ 27 августа 2010

Есть ли способ использовать fsolve в MATLAB, указав границу для решения?т.е. все переменные решения> 0

Ответы [ 3 ]

2 голосов
/ 27 августа 2010

Не напрямую, но одним из решений этой проблемы является добавление в уравнение термина, ограничивающего вашу проблему.

У меня нет набора инструментов оптимизации, поэтому я не могу дать вам конкретный пример с использованием fsolve, но вот как я бы это сделал с fminsearch, который имеет ту же проблему.

Но если я хочу ограничить свою проблему положительными решениями

myFun = @(args) abs(sin(args(1)) + cos(args(2))) + (args(1)<0) + (args(2)<0)
fminsearch(myFun, [0, 0])
ans =

    0.0000    1.5708

Должен быть способ подобным образом изменить ваше уравнение для решения вашей проблемы.

1 голос
/ 15 января 2014

Вы должны использовать lsqnonlin, который очень похож на fsolve, но позволяет вам указать связанные ограничения.

Другой подход заключается в использовании преобразования переменных. Например, для принудительного применения x> = 0, вместо решения F (x) = 0 w.r.t. x, решить F (z. ^ 2) = 0 w.r.t. z, а затем используйте x = z. ^ 2 в качестве решения. Это имеет несколько тонких опасностей. Например, вы должны избегать использования z (i) = 0 в качестве первоначального предположения, но это часто работает.

0 голосов
/ 27 августа 2010

Нет.Однако вместо решения для F(x)=0 вы можете минимизировать abs(F(x)), используя, например, FMINBND .

РЕДАКТИРОВАТЬ

К сожалению, fminbndпохоже, не поддерживает аргументы со значениями в массиве (я полагаю, это то, что вам нужно).Чтобы это работало, вам нужно обратиться к FMINCON из панели инструментов оптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...