【问题标题】:Numerical integration, dimensions do not agree despite use of .^ and .*数值积分,尽管使用了 .^ 和 .*,但尺寸不一致
【发布时间】:2015-07-14 19:22:37
【问题描述】:

我对 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);

提前谢谢你

【问题讨论】:

    标签: matlab matrix integration


    【解决方案1】:

    它会评估向量中的两个积分限制,因此函数中的 x 有效地是 [0 Inf],这就是长度不一致的原因。

    您可以在积分调用中将 'ArrayValued' 标志设置为 true

    K = integral( K_fun, 0,Inf,'ArrayValued', true );
    

    让它分别评估它们。

    我收到了另一个关于奇点的警告,但这很可能是因为您使用的是 0、无穷大和除法,因此它与您的函数的关系比集成调用更多。在K_fun 中添加一些eps 可能会有所帮助。

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

    【讨论】:

    • 警告实际上是由于被积函数的长期行为为x^-0.5,这是无限极限中的发散不正确积分。
    • 这是有道理的。在这种情况下,eps 将无济于事。
    • 谢谢,现在可以了。有这个警告,虽然没有停止,但我真的不明白问题出在哪里:你是什么意思洒一些 eps ?
    • 抱歉,措辞不佳。 eps 表示“epsilon”值,即机器/数据类型可表示的最小数字。当您进行涉及分析模型的数值计算时,有时您会得到表达式,其计算结果非常小,无法表示,并且会四舍五入为零。然后这个零通过连续的计算传播,导致虚假的零或无穷大。在这些结果中添加eps 会将它们推回到可表示的数字空间中。然而,正如 Troy 所说,这不是问题所在!
    • 您收到的警告是由于 x 趋于无穷大,其重要性超过了 A 或 B 值,并且您的函数接近 x/sqrt(x^3) = xx^( -3/2) = x^-0.5,正如特洛伊所说,这是发散的。 Matlab 通常可以很好地处理这些事情,这是一个警告而不是错误,但是如果您有任何方法可以测试您应该做的结果,并且如果您可以通过不同的途径获得最终结果,您可能可以完全避免这种情况.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 2018-11-10
    • 1970-01-01
    相关资源
    最近更新 更多