我对Matlab的erf
/ erfc
函数的准确性有疑问。
众所周知,如果erf(x)
为无穷大,x
仅等于1。
然而,在Matlab中,我很惊讶erf(6)
已经等于1而且6甚至不是很大!
erfc(x)
稍微好一点,erfc(27)
非零,而erfc(28)
为零。
有没有办法提高这个功能的数值性能?即,增加erf(x)
的值范围以获得不完全为1的值? (erfc
同样为0?)
答案 0 :(得分:1)
您与double precision floating point的交易。 erfc
执行的方式不同,因为值的间隔大于0而不是1.如果您确实需要更高的精度,则需要使用不同的数字系统来表示您的值(我不清楚为什么会这样)。如果您有Symbolic Math工具箱,请尝试使用variable precision arithmetic。尝试
erf(vpa(6))
返回符号值0.99999999999999997848026328750109
。随着参数变大,您需要使用digits
。当然,如果使用double
将结果转换回浮点数,您将失去所有额外的精度。