Matlab 数值积分,尽管使用了。^和,但尺寸不一致*

Matlab 数值积分,尽管使用了。^和,但尺寸不一致*,matlab,matrix,integration,Matlab,Matrix,Integration,我对Matlab集成有一个问题。它告诉我关于尺寸有一个错误。然而,他们确实同意,并且使用向量化运算符(.^.*等)正确地完成了操作。这是简单的代码,但我被卡住了 A = 1:10; B = 1:10; K_fun = @(x) (x ./ sqrt((x + A.^2 ) .* (x + B.^2) .* (x + B.^2)) ); K = integral( K_fun, 0,Inf ); 下面是命令窗口中的错误消息: Error using + Matrix dimensions

我对Matlab集成有一个问题。它告诉我关于尺寸有一个错误。然而,他们确实同意,并且使用向量化运算符(.^.*等)正确地完成了操作。这是简单的代码,但我被卡住了

A = 1:10;
B = 1:10;

K_fun = @(x) (x ./ sqrt((x + A.^2 ) .* (x + B.^2) .* (x + B.^2)) );
K = integral( K_fun, 0,Inf );
下面是命令窗口中的错误消息:

Error using  + 
Matrix dimensions must agree.

Error in @(x)(x./sqrt((x+A.^2).*(x+B.^2).*(x+B.^2)))

Error in integralCalc/iterateScalarValued (line 314)
                fx = FUN(t);

Error in integralCalc/vadapt (line 133)
            [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 84)
        [q,errbnd] = vadapt(@AToInfInvTransform,interval);

Error in integral (line 89)
Q = integralCalc(fun,a,b,opstruct);

Error in PROVA_New_Drag3 (line 21)
K = integral( K_fun , 0 , Inf);

提前谢谢

它会计算向量中的两个积分极限,因此函数中的
x
实际上是[0 Inf],这就是长度不一致的原因

您可以在整数调用中将“ArrayValue”标志设置为true

K = integral( K_fun, 0,Inf,'ArrayValued', true );
让它单独评估它们

我得到了另一个关于奇点的警告,但这很可能是因为你使用了0,无穷大和除法,所以它与你的函数的关系比积分调用的关系更大。在
K_fun
中洒一些
eps
可能会有帮助


更新:请参阅Troy对奇点警告的解释,并注意,
eps
实际上无助于此。

此警告实际上是由于被积函数的长期行为变为
x^-0.5
,这是无限极限下的发散不适当积分。这是有意义的。在这种情况下,
eps
不会有帮助。谢谢,现在它可以工作了。有这样一个警告,虽然没有停止,但我真的不明白问题出在哪里:你说的洒点eps是什么意思?对不起,糟糕的措辞
eps
表示“epsilon”值,即机器/数据类型可表示的最小数字。当你进行涉及分析模型的数值计算时,你有时会得到一些表达式,这些表达式的计算值非常小,无法表示,并且会四舍五入为零。然后,该零通过连续计算传播,导致伪零或无穷大。将
eps
添加到这些结果中会将它们推回到可表示的数字空间。然而,正如特洛伊所指出的,这不是问题所在!您得到的警告是由于当x趋于无穷大时,其重要性超过了A或B值,并且您的函数接近x/sqrt(x^3)=x.x^(-3/2)=x^-0.5,正如特洛伊指出的那样,这是发散的。Matlab通常可以很好地处理这些事情,这是一个警告,而不是一个错误,但是如果你有任何方法来测试你应该做的结果,如果你可以通过不同的途径得到你的最终结果,你可能完全可以避免这一点。