我正在尝试使用数值积分函数'integral'
我创建了一个由四个多项式函数组成的函数
[x; x^2; x^3; x^4]
现在我想用积分函数把这个向量一行一行地积分。我尝试为函数制作一个函数句柄,并将其传递给"积分"函数
function f = test(x)
f = [x,x^2,x^3,x^4];
end
然而,当调用它的命令行时,我得到了以下错误:
test_var=@test
integral(test_var,0,1)
Error using ^
One argument must be a square matrix and the other must be a scalar.
Use POWER (.^) for elementwise power.
Error in test (line 2)
f = [x,x^2,x^3,x^4];
Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);
Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);
Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);
Error in integral (line 88)
Q = integralCalc(fun,a,b,opstruct);
根据integral
:的文档
q = integral(fun, xmin, xmax)
-
对于标量值函数
fun
,您需要定义该函数,以便它接受矢量输入并产生矢量输出。对于标量值问题,函数
y = fun(x)
必须接受向量参数x
,并返回向量结果y
。这通常意味着fun必须使用数组运算符而不是矩阵运算符。例如,使用.*
(times
)而不是*
(mtimes
)。 -
如果有向量值函数
fun
,则需要使用输入标志'ArrayValued'
:将此标志设置为
true
,表示fun
是一个接受标量输入并返回向量、矩阵或N-D数组输出的函数。在这种情况下,不需要上述第1项中的要求:
如果将
'ArrayValued'
选项设置为true,则fun
必须接受标量并返回固定大小的数组。
因此,您需要添加输入标志'ArrayValued'
以指示您具有向量值函数:
f = @(x) [x; x^2; x^3; x^4]; % or [x; x.^2; x.^3; x.^4];
integral(f, 0, 1, 'ArrayValued', true) % or integral(@f, 0, 1, 'ArrayValued', true)
% if f is defined in a file
给出
ans =
0.500000000000000
0.333333333333333
0.250000000000000
0.200000000000000