Matlab舍入误差的影响,数值分析上机题 舍入误差与有效数

matlab软件求解舍入误差与有效数

舍入误差与有效数

东南大学机械工程学院

设SN= N。 j=1j2 1,其精确值为2(2 N N+1)

(1) 编制按从大到小的顺序SN=2 1+3 14 1……+N 1SN通用的程序;

(2) 编制按从小到大的顺序SN=N 1(N 1) 1+(N 2) 1+……+2 1SN通用的程序;

(3) 按两种顺序分别计算S102,S104,S106,并指出有效位数(编制程序时用单精度);

(4) 通过本上机题你明白了什么。 解:(1)从大到小的matlab程序:

function s=myfun1(N) format long; k=2;

s=single(0); for k=2:1:N a=1/(k*k-1); s=a+s; end end

1

1

1

1

1

1

1

1

1

1

3

1

1

(2)从小到大的matlab程序

function s=myfun2(N) format long; s=single(0); for i=N:-1:2 a=1/(i*i-1); s=a+s; end end

(3)

MATLAB技术论坛原创,原帖参见http://www.matlabsky.com/viewthread.php?tid=3093 该教程详细介绍了MATLAB舍入误差原理和计算,并给出实例验证。 由于涉及很多学公式和图形,帖中不方便展示,下面给出了大概的内容提要,具体参见本帖pdf附件http://www.matlabsky.com/viewthread.php?tid=3093! 舍入误差是计算机进行实计算是所产生的。之所以产生舍入误差是因为机器中进行的算术运算所涉及的是有限位的,从而导致计算只能用实际值的近视表示式来完成。在典型的计算机中,仅实系统的一个相对小的子集用来表示所有的实。这个子集包含了正负有理,且存储了小和指部分。 IEEE754-1985二进制浮点运算标准 MATLAB中所有值都是使用64bit表示的。根据754-1985规定,第一位是符号指示位(S),接下来的11位是指部分(C),最后称为尾的52位为小部分(F),指的基是2。 X64表示的区间范围 x64=0 10000000011 1011100100010000000000000000000000000000000000000000 y64=0 10000000011 1011100100001111111111111111111111111111111111111111 z64=0 10000000011 1011100100010000000000000000000000000000000000000001 这意味着,二进制机器x64不仅仅代表十进制的x,还表示x临域内的所有实,也就是说十进制区间(注意是左闭右开的区间) [(y+x)/2, (x+z)/2)= [15518507114430463/562949953421312, 15518507114430465/562949953421312) 内所有据都是使用机器x64表示的。这样机器的截断误差就出现了! 如何确定XMIN和XMAX 从IEEE754-1985的规定,我们容易知道64位机器能够表示的最小正,此时第64位为1其它为0,故 xmin=2^(-1023)*(1+0.5^52)≈10^(-308) 在计算小于xmin的据的时候,MATLAB直接当0处理 同理最大的正则第1位为0其它为1,故 xmax=2^1024*(2-0.5^52)≈10^308 在计算大于xmax据时,MATLAB视为Inf X的精度范围求解 二进制x64的前后一个,相当于在x64尾的最后一位加1或减1,故x64与最近的之间的距离为0.5^52 ,另外指位会将尾放大了2^n倍,故最终x的精度为0.5*2^(n-52)(注意必须乘以0.5,原因如上)。故在±0.5*2^(n-52)范围内的据,MATLAB都用x64表示,也就是认为都是x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值