多语言展示
当前在线:1090今日阅读:167今日分享:16

Matlab数值精度与eps函数

我们知道任何数据都是以有限位数的二进制来表示,那么IEEE标准的浮点数也不列外,其中双精度浮点数是用64位二进制表示,单精度浮点数用32位二进制表示。因此,不能以任意精度表示每一个实数。对于计算机中的浮点数,数与数之间存在最小间隔,这个间隔随着数的增大而不断增大,因此也叫相对精度(matlab帮助文档中称为Floating-point relative accuracy)。也就是一个数与计算机中能表示的与该数最近的一个数之间的间隔。可进一步参见:http://blog.sina.com.cn/s/blog_4513dde60100o6rl.html和http://baike.baidu.com/subview/18682/6280567.htm
工具/原料

matlab

方法/步骤
1

在matlab中通过eps函数来求解某数的浮点相对精度,下面给出示例代码e1=eps e2=eps('double') e3=eps('single') e4=eps(1/2)e5=eps(1)e6=eps(2)e7=eps(realmax)e8=eps(0)e9=eps(single(1/2))e10=eps(single(1))e11=eps(single(2))e12=eps(realmax('single'))e13=eps(single(0))

2

eps函数的一个用法是在需要考虑数字计算精度对结果的影响时,比如matlab中自带的求矩阵的秩的rank函数默认返回的是奇异值大于max(size(A))*eps(norm(A))的个数,比如下面代码执行的结果为U=[  -0.379274725817546   0.794481   0.0403   0.4725731  -0.5488  -0.4637   0.7853  -0.242  -0.7012  -0.865  -0.6589  -0.347273328675907  -0.253234469211253  -0.5784  -0.046   0.773559367084354];V=[-0.395899761267122   0.174787331274778  -0.893374215953781  -0.1644  -0.579336710586230  -0.8023   0.132   0.1623  -0.442564352640226   0.45279   0.2243   0.752  -0.558362918331707   0.348956259242386   0.436  -0.636424971841809];A=U*diag([10 20 30 1e-15])*V';def_tol=max(size(A))*eps(norm(A))rA1=rank(A)rA2=rank(A,1e-16)

推荐信息