Passing Structure through fminsearch

23 views (last 30 days)
Leah
Leah on 1 Apr 2024 at 21:58
Commented: Leah on 2 Apr 2024 at 15:27
There is a code that I am trying to improve by eliminating the global variables. The only issue is is that the function that is used for fminsearch has other functions inside that need the global variables. So I am thinking of passing a structure through fminsearch with an anonymous function. However, when I run the new code it seams like fminsearch is not performing properly becuase it goes at double the speed and not return a good answer.
Here is the original code calling the fminsearch function:
[p,c] = fminsearch('cost',p0); % OPTIMIZATION
%function for fminsearch:
function [c,meanErr] = cost(p)
global PHIs TAUs Parameters
%rest of code
end
Instead of having the variables of PHIs, TAUs, and Parameters as global, I send them to a structure S. Here is how I am trying to pass the structure through fminsearch:
S.p = p;
[p,c] = fminsearch(@(p) costLeg(S), S.p); % OPTIMIZATION
%function for fminsearch:
function [c,meanErr] = costLeg(S)
%rest of code
end
Am I passing this structure correctly? How can I double check that I am?
Thanks!

Accepted Answer

Matt J
Matt J on 1 Apr 2024 at 22:10
Edited: Matt J on 1 Apr 2024 at 22:14
If p is the unknown parameter vector, it must be passed separately from the fixed parameters,
S.PHI=...
S.TAU=...
[p,c] = fminsearch(@(p) costLeg(p,S), p0); % OPTIMIZATION
%function for fminsearch:
function [c,meanErr] = costLeg(p,S)
%rest of code
end
  1 Comment
Leah
Leah on 2 Apr 2024 at 15:27
I thought I tried this at some point but maybe I didn't execute it right. But this works! Thank you!!

Sign in to comment.

More Answers (0)

Categories

Find more on Optimization in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!