“输入参数过多”是啥意思?
Posted
技术标签:
【中文标题】“输入参数过多”是啥意思?【英文标题】:What does "too many input arguments" mean?“输入参数过多”是什么意思? 【发布时间】:2019-05-04 02:04:46 【问题描述】:我正在尝试使用 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】:f = @(t)(1./sin(sqrt(abs(t))))
只有一个输入变量t
。
去掉quadtx(f, -1, 2, 1.e-6, 3)
中的第四个参数--->quadtx(f, -1, 2, 1.e-6)
可变参数的含义
三角函数通常用附加参数n
定义,即
他们的周期性。
例如fn(x) = sin(2*n*pi*x)
。
要评估此功能,您需要首先修复n
,比如说n = 3
,
然后评估f3(x)
。
总结一下
要使用quadtx
中的第四个varargin
,例如更新f
f = @(x, n) = (1./sin(n*sqrt(abs(t))))
--> quadtx(f, -1, 2, 1.e-6, 3)
作为参考,您可以检查贝塞尔函数。
【讨论】:
以上是关于“输入参数过多”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章