Can matlab pso toolbox optimize a @(x,y) function?

9 views (last 30 days)
Hello everyboody! I'm trying to run the following code but I'm getting error:
f = @(x,y)sin(sqrt(x.^2+y.^2))/sqrt(x.^2+y.^2);
nvar = 2;
[x,fval] = particleswarm(f, nvar);
The error says:
Error using particleswarm>makeState (line 700)
Failure in initial objective function evaluation. PARTICLESWARM cannot continue.
Error in particleswarm>pswcore (line 170)
state = makeState(nvars,lbMatrix,ubMatrix,objFcn,options);
Error in particleswarm (line 152)
[x,fval,exitFlag,output] = pswcore(objFcn,nvars,lbRow,ubRow,output,options);
Error in Untitled (line 5)
[x,fval] = particleswarm(f, nvar);
Caused by:
Not enough input arguments.
Despite It says that there's "Not enough input arguments.", I saw many examples that was only necessary the function and the number of variables as input arguments.

Accepted Answer

Matt J
Matt J on 19 Jan 2017
Edited: Matt J on 19 Jan 2017
It is your objective function that must take only a single argument,
f = @(p) sin(sqrt(p(1).^2+p(2).^2))/sqrt(p(1).^2+p(2).^2);
  3 Comments
Matt J
Matt J on 19 Jan 2017
Yes, it is equivalent. For plotting purposes, you can obtain a two- argument equivalent as follows,
g=@(x,y) f([x,y]);

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!