“输入参数过多”是什么意思?

时间:2019-05-04 02:04:47

标签: matlab

我正在尝试使用Quadtx在Matlab中评估函数,但是我的代码给我一个“输入参数过多”的错误,并且我不确定是什么错误?我是否为varargin输入了错误的值?还是其他?

我在MATLAB命令提示符下输入以下内容:

>f = @(t)(1./sin(sqrt(abs(t))));
>quadtx(f, -1, 2, 1.e-6, 3)

但收到以下信息:

  

使用@(t)(1./sin(sqrt(abs(t))))时出错
  输入参数过多。

     

quadtx中的错误(第29行)
  fa = feval(F,a,varargin{:});

这是MATLAB quadtx代码:

function [Q,fcount] = quadtx(F,a,b,tol,varargin)
%QUADTX  Evaluate definite integral numerically.
%   Q = QUADTX(F,A,B) approximates the integral of F(x) from A to B
%   to within a tolerance of 1.e-6.  F is a string defining a function
%   of a single variable, an inline function, a function handle, or a
%   symbolic expression involving a single variable.
%
%   Q = QUADTX(F,A,B,tol) uses the given tolerance instead of 1.e-6.
%
%   Arguments beyond the first four, Q = QUADTX(F,a,b,tol,p1,p2,...),
%   are passed on to the integrand, F(x,p1,p2,..).
%
%   [Q,fcount] = QUADTX(F,...) also counts the number of evaluations
%   of F(x).
%
%   See also QUAD, QUADL, DBLQUAD, QUADGUI.
% Make F callable by feval.
if ischar(F) & exist(F)~=2
   F = inline(F);
elseif isa(F,'sym')
   F = inline(char(F));
end 
% Default tolerance
if nargin < 4 | isempty(tol)
   tol = 1.e-6;
end
% Initialization
c = (a + b)/2;
fa = feval(F,a,varargin{:});
fc = feval(F,c,varargin{:});
fb = feval(F,b,varargin{:});
% Recursive call 
[Q,k] = quadtxstep(F, a, b, tol, fa, fc, fb, varargin{:});
fcount = k + 3;
% ---------------------------------------------------------
function [Q,fcount] = quadtxstep(F,a,b,tol,fa,fc,fb,varargin)
% Recursive subfunction used by quadtx.
h = b - a; 
c = (a + b)/2;
fd = feval(F,(a+c)/2,varargin{:});
fe = feval(F,(c+b)/2,varargin{:});
Q1 = h/6 * (fa + 4*fc + fb);
Q2 = h/12 * (fa + 4*fd + 2*fc + 4*fe + fb);
if abs(Q2 - Q1) <= tol
   Q  = Q2 + (Q2 - Q1)/15;
   fcount = 2;
else
   [Qa,ka] = quadtxstep(F, a, c, tol, fa, fd, fc, varargin{:});
   [Qb,kb] = quadtxstep(F, c, b, tol, fc, fe, fb, varargin{:});
   Q  = Qa + Qb;
   fcount = ka + kb + 2;
end

1 个答案:

答案 0 :(得分:1)

f = @(t)(1./sin(sqrt(abs(t))))仅具有一个输入变量t。 删除quadtx(f, -1, 2, 1.e-6, 3) ---> quadtx(f, -1, 2, 1.e-6)

中的第四个参数

varargin的含义

三角函数通常用附加参数n定义,即 他们的周期性。 例如fn(x) = sin(2*n*pi*x)。 要评估此功能,您需要先修复n,例如n = 3, 然后评估f3(x)

总结

要使用varargin中的第四个quadtx,请更新f,例如

f = @(x, n) = (1./sin(n*sqrt(abs(t))))-> quadtx(f, -1, 2, 1.e-6, 3)

作为参考,您可以检查贝塞尔函数。