Clear Filters
Clear Filters

not enough input arguments error

1 view (last 30 days)
Erfan Hamdi
Erfan Hamdi on 6 Oct 2016
Commented: Erfan Hamdi on 6 Oct 2016
Hi everybody ! I have this code as my main function :
function [x,fx,ea,iter]=goldmin(f,xl,xu,es,maxit,varargin)
% goldmin: minimization golden section search
% [x,fx,ea,iter]=goldmin(f,xl,xu,es,maxit,p1,p2,...):
% uses golden section search to find the minimum of f
% input:
% f = name of function
% xl, xu = lower and upper guesses
% es = desired relative error (default = 0.0001%)
% maxit = maximum allowable iterations (default = 50)
% p1,p2,... = additional parameters used by f
% output:
% x = location of minimum
% fx = minimum function value
% ea = approximate relative error (%)
% iter = number of iterations
if nargin<3,error('at least 3 input arguments required'),end
if nargin<4||isempty(es), es=0.0001;end
if nargin<5||isempty(maxit), maxit=50;end
phi=(1+sqrt(5))/2;
iter=0;
fprintf('xl f(xl) xu f(xu)\n')
fprintf('%.3f %9.3f %9.3f %9.3f\n',xl,f(xl,varargin{:}),xu,f(xu,varargin{:}) )
while(1)
d = (phi-1)*(xu - xl);
x1 = xl + d;
x2 = xu - d;
if f(x1,varargin{:}) < f(x2,varargin{:})
xopt = x1;
xl = x2;
else
xopt = x2;
xu = x1;
end
iter=iter+1;
fprintf('%.3f %9.3f %9.3f %9.3f\n',xl,f(xl,varargin{:}),xu,f(xu,varargin{:}) )
if xopt~=0, ea = (2 - phi) * abs((xu - xl) / xopt) * 100;end
if ea <= es || iter >= maxit,break,end
end
x=xopt;fx=f(xopt,varargin{:});
and this is the function which i want to find the minimum point :
function y=p3function(x)
y=(1.5.*x.^6-2.*x.^4+12.*x);
each time i call the function i encounter :
>> gm(p3function,-3,3)
Error using p3function (line 2)
Not enough input arguments.
what should i do ?
  2 Comments
Guillaume
Guillaume on 6 Oct 2016
Edited: Guillaume on 6 Oct 2016
Can you show the complete error message? It should also tell you on which line of gm (same as goldmin ?) p3function was called before it failed.
Erfan Hamdi
Erfan Hamdi on 6 Oct 2016
yes gm is the goldmin
>> gm(p3function,-3,3)
Error using p3function (line 2)
Not enough input arguments.

Sign in to comment.

Accepted Answer

dbmn
dbmn on 6 Oct 2016
Two suggestions:
- you used gm instead of goldmin. Are you shure it is wanted that way?
gm(p3function,-3,3)
- Instead of passing a string with the functionname you could try passing a function handle
goldmin(@p3function,-3,3)
This last command worked on my machine

More Answers (1)

Steven Lord
Steven Lord on 6 Oct 2016
When you write this:
gm(p3function,-3,3)
MATLAB will call p3function with zero input arguments and use the value it returns as the first input to gm. But your p3function requires one input argument, so you receive an error at the first part of that process. Since you want gm to be able to call the function you specify as the first input argument, pass that first argument as a function handle.
gm(@p3function, -3, 3)

Categories

Find more on Elementary Math 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!