Matlab,exp函数溢出
有谁能建议我如何找到Matlab中函数Matlab,exp函数溢出,matlab,exp,Matlab,Exp,有谁能建议我如何找到Matlab中函数exp没有溢出的最大值和溢出的最小值。 谢谢大家! 尝试查看函数realmin()或intmin()。它们也有max合作伙伴,例如: realmin('double') realmax('single') intmin('int8') intmax('int64') 这将告诉您可以在MATLAB类型中表示的最小值。低于此值的任何数字都将被设置为给定类型的此最小值。 T = log(realmax('double')); exp(T+255*eps) 给
exp
没有溢出的最大值和溢出的最小值。
谢谢大家! 尝试查看函数
realmin()
或intmin()
。它们也有max合作伙伴,例如:
realmin('double')
realmax('single')
intmin('int8')
intmax('int64')
这将告诉您可以在MATLAB类型中表示的最小值。低于此值的任何数字都将被设置为给定类型的此最小值。
T = log(realmax('double'));
exp(T+255*eps)
给予
1.7977e+308
及
给予
我可以看到人们如何用这个来回答我认为是OP的问题。但我也能看出OP可能无法为自己找到解决方案的其余部分。你是对的,我没有完全回答这个问题,只是提供了能让OP走上正轨的信息。对不起,我指的是最大价值。。我编辑了这个问题,你能解释一下你从哪里得到的255吗,以及它背后的逻辑,为什么你要计算realmax的log?使用“二分法”。也就是说,我从
exp(T+I*eps)
开始,其中I=1000
,并检查它是否确实导致溢出。然后设置i=500
;再次泛滥。设置i=250
;它不会溢出。然后i=375
,依此类推。在这种情况下,一种快速而肮脏的方法当然是在循环中增加i
,直到溢出,但是,在我看来,“二分法”的哲学一般来说是有用的。我希望这会有帮助。当你有一个形式为exp(x)=y
的方程时,取两边的log
就可以得到x=log(y)
。exp
和log
都是(严格地)递增函数,因此,由于您需要最大的x
可以在exp(x)
中使用,因此您需要最大的y
。现在,为了向后追踪逻辑,我们通过向Matlab询问realmax('double')
(假设我们将使用double
精度)的答案,找到了最大的y
。称这个最大值为y_M。对于x_M,我们有exp(x_M)=y_M
?我们采用双方的log
。我希望这有帮助。如果我有什么建议,就写在纸上。谢谢,这很有道理!
exp(T+256*eps)
inf