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

问题描述 投票:1回答:1

我想用梯形积分法将x ^ 2从2积分到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

那个错误的根源是什么?

matlab
1个回答
2
投票

您必须使用功能柄trap而非@f来调用f

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)来评估该功能。

© www.soinside.com 2019 - 2024. All rights reserved.