Passing arguments into fsolve without using globals

12 views (last 30 days)
Hello,
How do I pass arguments, vectors, or constants into fsolve? A simple example:
REF=[x,y,z] <-- I want this to pass into 'myfun' during fsolve
[out,fval]=fsolve('myfun',y0)
...
function [Z]=myfun(y)
Z=[ REF(1)*y(1) + REF(2);
REF(3)*y(2) - REF(2)];
I am trying to avoid using globals.

Accepted Answer

Matt Tearle
Matt Tearle on 21 Oct 2011
1) Rewrite myfun to take two inputs:
function Z = myfun(y,REF)
...
2) Use an anonymous function handle to make a function of one variable, with the second input to myfun (REF) embedded into it:
REF = [x,y,z];
f = @(y) myfun(y,REF); % function of dummy variable y
[out,fval]=fsolve(f,y0)
  4 Comments
Jesse
Jesse on 28 Oct 2011
Good idea. I am familiar with structures in C-code. I think I should have no prob putting it into MATLAB format.
MADAN MOHAN
MADAN MOHAN on 17 Jun 2018
Hello! I have been trying with reference to your example but i am getting certain errors: So in one script file "eqns.m", I have written the following lines of codes:
function F = eqns(x,k)
x1=x(1);
x2=x(2);
F(1) = x1.^2 + 2*x2.^2 - 5*x1 + 7*x2 - k;
F(2) = 3*x1.^2 - x2.^2 + 4*x1 +2*x2 - k;
end
And the other script file for the calling of the function into the fsolve is:
function f = solveit(x1, x2, k)
x0 = [x1; x2];
[z,fval] = fsolve(@(x)eqns(x,k),x0);
f = z;
end
And I call this function "solveit" in the commend window and I get the following error:
>> solveit(1,2,30)
Error using eqns
Too many input arguments.
Error in solveit>@(x)eqns(x,k) (line 7) [z,fval] = fsolve(@(x)eqns(x,k),x0);
Error in fsolve (line 217) fuser = feval(funfcn{3},x,varargin{:});
Error in solveit (line 7) [z,fval] = fsolve(@(x)eqns(x,k),x0);
Caused by: Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.

Sign in to comment.

More Answers (0)

Categories

Find more on Simulink Environment Customization 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!