我的代码中有以下行:
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中测试相同的线时,结果是有限的值。我该如何解决这个问题?感谢。
答案 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)));