problem of function handles, thx

for instance,
parms=ones(2,1);
myfunc = @(parms) X.*parms(1)+Y.*parms(1);
I can directly indicate 'myfunc' in 'fmincon'. [parms,favl]=fmincon(myfunc,parms,....);
However, if I want to separately write 'myfunc' in a function script and then quote it. [parms,favl]=fmincon(myfunc,parms,....); the 'fmincon' will report 'Not enough input in myfunc'.
X and Y are variables stored in workspace, they are not unknown parameters, only parms(1) and parms(2) required estimation.
anyone can tell me how to solve this problem? many thanks!

 Accepted Answer

Sean de Wolski
Sean de Wolski on 14 Jan 2015
Edited: Sean de Wolski on 14 Jan 2015
You need an @ before myfunc, otherwise it tries to evaluate it:
@myfunc % reference to function myfunc; do not evaluate
myfunc % when myfunc is its own file tries to run it
myfunc % when myfunc is a function handle (variable), then myfunc is already a reference to whatever

4 Comments

Zhixiao
Zhixiao on 14 Jan 2015
Edited: Zhixiao on 14 Jan 2015
sorry=.= I still do not understand about it, could you please give me some examples? I have read the examples provided by the official website, but I just still do not understand about it... many thanks
When you say
myfunc = @(x)x^2
myfunc is now a reference to the function x^2.
if you have a file myfunc2:
function y = myfunc2(x)
y = x^2
And say
myfunc2
It is going to try and call myfunc2. Myfunc2 won't run because it needs x, the error you're getting for not enough inputs.
Since you want to create a reference to myfunc2, you say
myfunc2ref = @myfunc2
Now myfunc2ref is a reference just like myfunc above. You can pass this directly into fminunc.
How can I call function y =myfunc2(x) in fmincon? e.g. 'myfunc2'?

Sign in to comment.

More Answers (0)

Categories

Products

Community Treasure Hunt

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

Start Hunting!