即使使用 vpa 或 sym,如何在不获取 inf 的情况下计算 matlab 中的指数?

How to compute an exponent in matlab without getting inf even with vpa or sym?

我在 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

而且 return 是 inf 即使我在其中使用了 vpa 或 sym 这应该有什么问题?

还要看你是否正确使用了vpa

>> vpa(1e400)

ans =

Inf

>> vpa('1e400')

ans =

1.0e400

因此,在使用 vpa 之前,您始终必须防止 matlab 计算某些东西 large/small。现在,这并不能解决您的问题,因为

>> 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

当然我忽略了一个极小的虚部,但这并没有太大变化。你确实意识到这是一个很大的数字,对吧?

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