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

时间:2017-10-13 10:11:25

标签: matlab function handles

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

1 个答案:

答案 0 :(得分:0)

根据documentation of 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必须接受标量并返回固定大小的数组。

  3. 因此,您需要添加输入标记'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