我正在尝试使用数值积分函数'integral'
我创建了四个多项式函数的函数
[x; x^2; x^3; x^4]
现在我想使用积分函数逐行整合这个向量。 我尝试为函数创建函数句柄并将其传递给'integral'函数
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);
答案 0 :(得分:0)
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