【问题标题】:Creating array handles for function that returns vector of polynomial expressions为返回多项式表达式向量的函数创建数组句柄
【发布时间】:2017-10-13 10:11:24
【问题描述】:

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

【问题讨论】:

    标签: matlab function handles


    【解决方案1】:

    根据documentation of integral

    q = integral(fun, xmin, xmax)

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

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

    2. 如果你有一个向量值函数fun你需要使用输入标志'ArrayValued'

      将此标志设置为 true 以指示 fun 是一个接受标量输入并返回向量、矩阵或 N 维数组输出的函数。

      在这种情况下,上述第 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      相关资源
      最近更新 更多