Why does my objective function return complex?

I have a likelihood function that I need to minimize. I use fmincon to search for the minimum. Iterations of fmincon sometimes show "Objective function returned complex; trying a new point…" But in my code I do not take square root of any variable. Why am I then getting this error? A second question is whether there is a counterpart of
dbstop if naninf
for "complex" like the
dbstop if complex
command? Or would
dbstop if error
do?

2 件のコメント

Torsten
Torsten 2022 年 2 月 28 日
log(x), x^a and sqrt(x) are the most common sources to get complex numbers.
David Goodmanson
David Goodmanson 2022 年 2 月 28 日
also asin and acos

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

 採用された回答

Matt J
Matt J 2022 年 2 月 28 日
編集済み: Matt J 2022 年 2 月 28 日

0 投票

There is no "dbstop if complex", but you can set a conditional breakpoints in your objective function to detect when theany particular value is complex.Or, insert a keyboard() command.
function fval=myobjective(x)
fval=....
if ~isreal(fval)
keyboard
end
end

4 件のコメント

Snoopy
Snoopy 2022 年 3 月 2 日
At https://nl.mathworks.com/help/matlab/matlab_prog/set-breakpoints.html#buvvmfu-1, Pause on Errors to pause on all errors looks like an alternative solution.
Torsten
Torsten 2022 年 3 月 2 日
Getting complex is not an error.
Snoopy
Snoopy 2022 年 3 月 2 日
編集済み: Snoopy 2022 年 3 月 2 日
OK. So "Objective function returned complex; trying a new point..." is not an error and MATLAB will not pause when this warning is displayed.
Walter Roberson
Walter Roberson 2022 年 3 月 2 日
suggest you add a conditional breakpoint to trigger if any(imag(VALUE))

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeDebugging and Analysis についてさらに検索

質問済み:

2022 年 2 月 28 日

コメント済み:

2022 年 3 月 2 日

Community Treasure Hunt

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

Start Hunting!

Translated by