为返回多项式表达式向量的函数创建数组句柄



我正在尝试使用数值积分函数'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)

  1. 对于标量值函数fun,您需要定义该函数,以便它接受矢量输入并产生矢量输出。

    对于标量值问题,函数y = fun(x)必须接受向量参数x,并返回向量结果y。这通常意味着fun必须使用数组运算符而不是矩阵运算符。例如,使用.*(times)而不是*(mtimes)。

  2. 如果有向量值函数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

最新更新