Passing arguments into fsolve without using globals
12 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
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
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.
More Answers (0)
See Also
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!