如何在matlab中计算指数而不获得inf,即使使用vpa或sym?

如何在matlab中计算指数而不获得inf,即使使用vpa或sym?,matlab,numeric,numerical,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

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

然后返回到inf 即使我在其中使用了vpa或sym
这会有什么问题?

这还取决于您是否正确使用了
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)

当然,我忽略了一个很小的假想部分,但这并没有多大改变。你知道这是一个很大的数字,对吗


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

你能在你的代码中添加一些关于如何使用这个操作结果的信息吗?如果这种方法可行,我不得不用+e032来划分它,先生,我很抱歉,我突然发布了我工作中的一行,我试图实现一个论文中的公式,这些公式把我引入了这个问题,所以我很好奇为什么会发生这种情况,因为在论文中可能会做对,是的,我想我应该先在纸上写,而不是突然跳到matlab上,但是有没有办法我可以计算出来,Andras先生?@arielrahardi,正如你所看到的,即使是你最好的机会(即符号数学工具箱)也会给出inf,因为你的数字太大了。看看你最新的问题:你确定这些数字是正确的吗?你的工作背后似乎有一些身体上的动机,但很少有如此不同量级(1e24和1e-24)的数量彼此相邻。你确定公式和参数都是正确的吗?是的,我非常确定,因为我还有另一个关于这些量级的工作。我没有发现任何问题。这次我只想试试这个新配方,结果是这样的
exp(1397500000000000000000000)
10^606926538459794441764864
1e606926538459794441764864