如何计算matlab中的指数而不用vpa或sym得到inf?

时间:2015-10-26 10:02:04

标签: matlab numeric numerical

我在matlab中有这个exp函数

a1=(exp(-beta0*abs(z-zaks)));
b1=(ohmi*exp(-2*beta0*H)*exp(-beta0*(z+zaks)))
c1=(ohmu*exp(beta0*(z+zaks)))
f1=(ohmu*ohmi*exp(-2*beta0*H)*exp(beta0*abs(z-zaks)))
g1=2*beta0*(1-(ohmu*ohmi*exp(-2*beta0*H)))
h1=(a1+b1+exp(c1)+f1)
j1=exp(h1)
gpm=j1/g1

beta0=1.411608078945960e+20 + 8.949434210398852e-26i
betai=[1.411608078945960e+20 + 8.949434210398852e-26i 1.411608078945960e+20 +   1.398349095374821e-26i 1.411608078945960e+20 + 1.398349095374821e-27i 1.411608078945960e+20 + 1.398349095374821e-26i]

ohmi=[9.803212783111246e-92 + 2.674639380309578e-46i 2.428723887707741e-93 + 4.457732300515962e-47i -2.428723887707741e-93 - 4.457732300515962e-47i;1.411608078945960e+20 + 1.398349095374821e-26i]

ohmu=1.004853842833425e-91 + 3.169942969255795e-46i
z=zaks=4950
H=5000

它又回到了inf 即使我在其中使用vpa或sym 怎么会出错?

1 个答案:

答案 0 :(得分:0)

这还取决于您是否正确使用了vpa

>> vpa(1e400)

ans =

Inf

>> vpa('1e400')

ans =

1.0e400

因此,在使用vpa之前,您必须始终阻止matlab评估大/小的内容。现在,这不能解决您的问题,因为

>> vpa(exp(1.3975e+024 +8.8599e-022*i))

ans =

Inf + Inf*i

>> vpa('exp(1.3975e+024 +8.8599e-022*i)')

ans =

Inf + Inf*i

>> exp(vpa('1.3975e+024 +8.8599e-022*i'))

ans =

RD_INF + RD_INF*i

因此,无论您使用何种方法,您都可以获得所有意图和目的的无穷大。

为什么这样,你可能会问?考虑一下

exp(710)

ans =

   Inf

现在,您的号码大致等于

exp(1397500000000000000000000)

10^606926538459794441764864

1e606926538459794441764864

当然,我忽略了一个极小的想象部分,但这并没有太大变化。您确实意识到 这是一个非常大的数字 ,对吗?

所以,正如@BillBokeey已经评论过:你打算用这个号码做什么?您最好的选择可能是先在纸上做任何事情,然后达到计算机可以处理的结果。