not enough input arguments error

1 回表示 (過去 30 日間)
Erfan Hamdi
Erfan Hamdi 2016 年 10 月 6 日
コメント済み: Erfan Hamdi 2016 年 10 月 6 日
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 件のコメント
Guillaume
Guillaume 2016 年 10 月 6 日
編集済み: Guillaume 2016 年 10 月 6 日
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 2016 年 10 月 6 日
yes gm is the goldmin
>> gm(p3function,-3,3)
Error using p3function (line 2)
Not enough input arguments.

サインインしてコメントする。

採用された回答

dbmn
dbmn 2016 年 10 月 6 日
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
  1 件のコメント
Erfan Hamdi
Erfan Hamdi 2016 年 10 月 6 日
Thanks ! that function handle helped !!

サインインしてコメントする。

その他の回答 (1 件)

Steven Lord
Steven Lord 2016 年 10 月 6 日
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)

カテゴリ

Help Center および File ExchangeIntroduction to Installation and Licensing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by