Writing nonlinear constraint in fmincon

1 回表示 (過去 30 日間)
george pepper
george pepper 2020 年 10 月 23 日
コメント済み: george pepper 2020 年 10 月 27 日
Hello,
I minimize a function with 4 parameters on fmincon. The vector of parameters is b=[a1 a2 b1 b2 ]. How can I add a nonlinear constraint such that 5/b1<b2?
  2 件のコメント
Matt J
Matt J 2020 年 10 月 24 日
編集済み: Matt J 2020 年 10 月 24 日
Note that it can be critically misleading to people to say you want 5/b1<b2 if you really mean 5/b1<=b2. Theoretically, for example, the following minimization problem no solution:
min. x,
s.t. x>0
but the solution to,
min. x
s.t. x>=0
is x=0.
george pepper
george pepper 2020 年 10 月 27 日
Thanks a lot! This is great.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2020 年 10 月 24 日
5/b1 < b2 implies 5 < b2*b1 implies 0 < b2*b1 - 5 implies b2*b1 - 5 < 0 implies b2*b1 - 5 + delta = 0 for some positive delta.
This leads to the constraint
delta = eps(realmin);
b(3)*b(4) - 5 + delta %<= 0 implied
However I would suggest you think more about your boundary constraint. Is 5/b1 == b2 an actual problem for your situation? If it is then you run serious risks that due to round-off issues, that whatever calculation fails with 5/b1 == b2, will not round in a "fortunate" way.
I personally would probably not use eps(realmin) for the delta: I would be more likely to use 5*(1-eps) instead of 5+delta
  3 件のコメント
Walter Roberson
Walter Roberson 2020 年 10 月 24 日
True, I forgot about the case of negatives.
You could always code
5/b(3) - b(4)
and make the appropriate alteration for the border equality... provided that you know that b(3) is never 0.
george pepper
george pepper 2020 年 10 月 27 日
Thank you very much!

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by