为什么在使用integral在MatLab中执行数值积分时,需要将'ArrayValued'设置为true:
integral
'ArrayValued'
true
f = @(x) 5; integral(f,0,2,'ArrayValued',true)
..。而在这种情况下,不需要该选项?:
f = @(x) x; integral(f,0,2)
wgx48brx1#
来自描述被积参数的integral的文档:对于标量值问题,函数y = fun(x)必须接受向量参数x,并返回向量结果y。这通常意味着fun必须使用数组运算符而不是矩阵运算符。例如,使用.*(times)而不是*(mtimes)。如果将'ArrayValued'选项设置为true,那么Fun必须接受标量并返回固定大小的数组。因此,如果x是向量,则像f = @(x) 5这样的常量函数不会返回与x大小相同的结果。integral函数之所以需要这样做,是因为为了提高性能,它针对标量函数进行了矢量化--它实际上通过一个函数调用同时计算多个点的被积函数。您可以使您的常量函数兼容,而不要求'ArrayValued'为true,如下所示:
y = fun(x)
x
y
fun
.*
times
*
mtimes
f = @(x) 5
f = @(x) 5+0*x; integral(f,0,2)
1条答案
按热度按时间wgx48brx1#
来自描述被积参数的
integral
的文档:对于标量值问题,函数
y = fun(x)
必须接受向量参数x
,并返回向量结果y
。这通常意味着fun
必须使用数组运算符而不是矩阵运算符。例如,使用.*
(times
)而不是*
(mtimes
)。如果将'ArrayValued'
选项设置为true
,那么Fun必须接受标量并返回固定大小的数组。因此,如果
x
是向量,则像f = @(x) 5
这样的常量函数不会返回与x
大小相同的结果。integral
函数之所以需要这样做,是因为为了提高性能,它针对标量函数进行了矢量化--它实际上通过一个函数调用同时计算多个点的被积函数。您可以使您的常量函数兼容,而不要求
'ArrayValued'
为true
,如下所示: