matlab中erf / erfc函数的问题

时间:2016-08-17 20:31:51

标签: matlab precision numerical-methods

我对Matlab的erf / erfc函数的准确性有疑问。

众所周知,如果erf(x)为无穷大,x仅等于1。

然而,在Matlab中,我很惊讶erf(6)已经等于1而且6甚至不是很大!

erfc(x)稍微好一点,erfc(27)非零,而erfc(28)为零。

有没有办法提高这个功能的数值性能?即,增加erf(x)的值范围以获得不完全为1的值? (erfc同样为0?)

1 个答案:

答案 0 :(得分:1)

您与double precision floating point的交易。 erfc执行的方式不同,因为值的间隔大于0而不是1.如果您确实需要更高的精度,则需要使用不同的数字系统来表示您的值(我不清楚为什么会这样)。如果您有Symbolic Math工具箱,请尝试使用variable precision arithmetic。尝试

erf(vpa(6))

返回符号值0.99999999999999997848026328750109。随着参数变大,您需要使用digits。当然,如果使用double将结果转换回浮点数,您将失去所有额外的精度。