Matlab中的Inf * 0

时间:2015-11-18 15:09:36

标签: matlab nan infinity

我的代码中有以下行:

 1 - sqrt(pi/2)*sig*sqrt(Eb)*theta_l*exp(theta_l^2*sig^2*Eb/2).*(1 + erf(-theta_l*sig*sqrt(Eb)/sqrt(2)));

当我为以下参数计算此表达式时:  Eb = 6324.6;  sig = 1/sqrt(2);  theta = 0.7;,我得到了南。我知道这来自Infinity的产品0。

然而,当我在Mathematica中测试相同的线时,结果是有限的值。我该如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:2)

您的功能中有问题的部分是exp(Eb/2)。 Eb的值太大,其取幂的结果不能用双精度浮点数表示(Mathematica中的数值精度明显更高,或动态可能以性能为代价),因此得到{{1 }}。

但是,您只需将输入单位更改为您的功能即可停止此操作。例如,如果我们将您的函数定义为匿名函数...

Inf

然后

funky = @(Eb, sig, theta_l) ...
         1 - sqrt(pi/2)*sig*sqrt(Eb)*theta_l*exp(theta_l^2*sig^2*Eb/2) .* ...
         (1 + erf(-theta_l*sig*sqrt(Eb)/sqrt(2)));