"isfield" for hidden field in optimoptions

hi,
with Matlab 2019 it seems that:
options = optimoptions(@fsolve,'JacobPattern',speye(5))
isfield(options,'JacobPattern')
will return 0. But options.JacobPattern will return the speye(5).
I guess this is due to the hidden nature of JacobPattern. I want the code to check if the field is specified or not.
How do I do that?

 Akzeptierte Antwort

Walter Roberson
Walter Roberson am 11 Feb. 2025
Bearbeitet: Walter Roberson am 11 Feb. 2025

0 Stimmen

optimoptions returns on object of class optim.options.Fsolve not a struct.
You need to use
isprop(options,'JacobPattern')
However, more likely is that you want
isprop(options,'JacobPattern') && ~strcmp(options.JacobPattern), 'sparse(ones(Jrows,Jcols))')

3 Kommentare

Stephen23
Stephen23 am 11 Feb. 2025
The design decision for "If S is not a structure array, then isfield returns 0" baffles me. It seems to generate plenty of confusion (such as this question) but has precious few use-cases. Why not simply throw an error?
Walter Roberson
Walter Roberson am 11 Feb. 2025
I dunno. It is documented though
If S is not a structure array, then isfield returns 0.
I guess it makes it marginally easier to handle the situation where a function returns either a structure array or else []
Stephen23
Stephen23 am 11 Feb. 2025
Such situations are also easily handled by the user: isstruct(S) && isfield(S,..)

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Matt J
Matt J am 11 Feb. 2025
Bearbeitet: Matt J am 11 Feb. 2025
One way:
options = optimoptions(@fsolve,'JacobPattern',speye(5));
isNonDefault = ~isequal(options.JacobPattern, optimoptions(@fsolve).JacobPattern )
isNonDefault = logical
1

Kategorien

Produkte

Version

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by