Matlab 使用具有另一个函数作为参数的函数:

Matlab 使用具有另一个函数作为参数的函数:,matlab,Matlab,我想用梯形积分法把x^2从2积分到4。为此,我定义了一个包含4个参数的函数trap: function y = trap( fn, a, b, h ) n = (b-a)/h; x = a + [1:n-1]*h; y = h/2*(feval(fn, a) + feval(fn, b) + 2*sum(feval(fn,x))); 和一个函数f function y= f(x) y=x^2 end 现在,通过执行trap(f,2,4,0.1),我得到以下错误

我想用梯形积分法把x^2从2积分到4。为此,我定义了一个包含4个参数的函数
trap

function y = trap( fn, a, b, h )
    n = (b-a)/h;
    x = a + [1:n-1]*h;
    y = h/2*(feval(fn, a) + feval(fn, b) + 2*sum(feval(fn,x)));
和一个函数
f

function y= f(x)
    y=x^2
end
现在,通过执行
trap(f,2,4,0.1)
,我得到以下错误:

Not enough input arguments.

Error in f (line 2)
    y=x^2

该错误的根源是什么?

您必须使用函数句柄
@f
,而不是
f
调用
trap

trap(@f,2,4,0.1)

function y = trap( fn, a, b, h )
  n = (b-a)/h;
  x = a + [1:n-1]*h;
  y = h/2*(fn(a) + fn(b) + 2*sum(fn(x)));
end

function y= f(x)
  y = x.^2;
end
正如所料

ans =
    18.67
您还需要在
f(x)
中进行元素相乘,以计算
y=x.^2

并且不需要
feval
。您可以直接调用
fn(a)
来评估函数。

有什么可以避免的原因吗?例如,
xstep=0.1然后
X=2:xstep:4
然后
Area=trapz(X,X.^2)
效果很好。减小
xstep
大小,使
区域
收敛(具有所需的精度)。