Failure in initial objective function evaluation. FMINUNC cannot continue.

I tried to evaluate this function but I am getting this error Failure in initial objective function evaluation.
FMINUNC cannot continue.
Please what is the best way to evaluate this function
f = x(2)^2*x(9)^2 + x(2)^2*x(9) + x(2)^3*x(9) - x(3)*x(5)*x(9)^2 + x(6)*x(8)*x(9)^2 + x(6)*x(8)*x(9)^3 + x(2)*x(6)*x(8)*x(9)^2;

 採用された回答

Star Strider
Star Strider 2019 年 11 月 19 日
Unless it is already in a function file, it needs to be an anonymous function:
f = @(x) x(2)^2*x(9)^2 + x(2)^2*x(9) + x(2)^3*x(9) - x(3)*x(5)*x(9)^2 + x(6)*x(8)*x(9)^2 + x(6)*x(8)*x(9)^3 + x(2)*x(6)*x(8)*x(9)^2;
If it is in a function file (and you have passed the function handle to fminunc correctly), the initial parameter estimates could be the problem. Please post those.

9 件のコメント

Kelechi Emerole
Kelechi Emerole 2019 年 11 月 19 日
These are the code, am I doing anyhthing wrong? Sorry I am new to matlab
fun =@(x)x(2)^2*x(9)^2 + x(2)^2*x(9) + x(2)^3*x(9) - x(3)*x(5)*x(9)^2 + x(6)*x(8)*x(9)^2 + x(6)*x(8)*x(9)^3 + x(2)*x(6)*x(8)*x(9)^2;
x0 = [-.5, 0];
options = optimoptions('fminunc','Algorithm','quasi-newton');
options.Display = 'iter';
[x, fval, exitflag, output] = fminunc(fun,x0,options);
Star Strider
Star Strider 2019 年 11 月 19 日
You have 9 parameters, so ‘x0’ must have 9 elements.
For example —
fun =@(x)x(2)^2*x(9)^2 + x(2)^2*x(9) + x(2)^3*x(9) - x(3)*x(5)*x(9)^2 + x(6)*x(8)*x(9)^2 + x(6)*x(8)*x(9)^3 + x(2)*x(6)*x(8)*x(9)^2;
x0 = rand(9,1);
options = optimoptions('fminunc','Algorithm','quasi-newton');
options.Display = 'iter';
[x, fval, exitflag, output] = fminunc(fun,x0,options);
This runs without error, however I doubt the result is what you want.
Kelechi Emerole
Kelechi Emerole 2019 年 11 月 20 日
Thanks very much Sir, it runs but ends up with this problem. How do I solve it? Thanks once agian.
fminunc stopped because the objective function value is less than
or equal to the default value of the objective function limit.
Star Strider
Star Strider 2019 年 11 月 20 日
That is not an error or a problem. It is simply a message from fminunc that it stopped, and the reason.
Meanwhile, consider changing your fminunc call to:
[x, fval, exitflag, output] = fminunc(@(x)norm(fun(x)), x0, options);
That may be the result you want.
Kelechi Emerole
Kelechi Emerole 2019 年 11 月 20 日
Wow thank you Sir for your quick reply, it produced this line, is that a problem?
fminunc stopped because it cannot decrease the objective function
along the current search direction.
Kelechi Emerole
Kelechi Emerole 2019 年 11 月 20 日
Mr Star strider, thank you very much. I have gotten the result I want.
Star Strider
Star Strider 2019 年 11 月 20 日
As always, my pleasure!
It is not a probllem. Again, fminunc is simply telling you that it stopped, and the reason.
Mohammed Ouallal
Mohammed Ouallal 2020 年 8 月 15 日
編集済み: Bruno Luong 2020 年 8 月 15 日
It seems that you resolve the problem but did not show how! please be kind and share the complete solution.
Thank you for the understanding!
Star Strider
Star Strider 2020 年 8 月 15 日
Yes, I did!
Unless it is already in a function file, it needs to be an anonymous function

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

その他の回答 (0 件)

カテゴリ

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by