Passing Structure through fminsearch

3 ビュー (過去 30 日間)
Leah O'Shea
Leah O'Shea 2024 年 4 月 1 日
コメント済み: Leah O'Shea 2024 年 4 月 2 日
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!

採用された回答

Matt J
Matt J 2024 年 4 月 1 日
編集済み: Matt J 2024 年 4 月 1 日
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 件のコメント
Leah O'Shea
Leah O'Shea 2024 年 4 月 2 日
I thought I tried this at some point but maybe I didn't execute it right. But this works! Thank you!!

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeOptimization についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by