数值积分,尽管使用了.^和.*

问题描述 投票:0回答:1

我对 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 numerical-integration
1个回答
1
投票

它评估向量中的积分极限,因此函数中的

x
实际上是 [0 Inf],这就是长度不一致的原因。

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

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

让它单独评估它们。

我收到了关于奇点的另一个警告,但这可能是因为您正在使用 0、无穷大和除法,因此它与您的函数的关系比积分调用更多。在

eps
周围撒一些
K_fun
可能会有所帮助。

更新:请参阅 Troy 对奇点警告的解释,并注意

eps
实际上对此没有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.