Matlab 使用具有另一个函数作为参数的函数:
我想用梯形积分法把x^2从2积分到4。为此,我定义了一个包含4个参数的函数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),我得到以下错误
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
大小,使区域
收敛(具有所需的精度)。