Passing Structure through fminsearch

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!

 Respuesta aceptada

Matt J
Matt J el 1 de Abr. de 2024
Editada: Matt J el 1 de Abr. de 2024
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 comentario

Leah O'Shea
Leah O'Shea el 2 de Abr. de 2024
I thought I tried this at some point but maybe I didn't execute it right. But this works! Thank you!!

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Preguntada:

el 1 de Abr. de 2024

Comentada:

el 2 de Abr. de 2024

Community Treasure Hunt

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

Start Hunting!

Translated by