matlab数值分析程序--高等数学,数值代数的matlab实现-文字版, matlab电子书, 和matlab 有关的电子书:

1.4 数值计算中应注意的问题

 例1.4.1 求数的近似值.

解 (1)直接用MATLAB命令

 

 >> x=(7^15)*(sqrt(1+8^(-19))-1)

运行后输出结果

x = 0

问题出现在两个相近的数相减时,计算机运行程序

>>sqrt(1+8^(-19))-1

运行后输出结果

 ans = 0

由于计算机硬件只支持有限位机器数的运算,因此在计算中可能引入和传播舍入误差.因为有效数字的严重损失,导致输出的结果为0,计算机不能再与数继续进行真实的计算,所以,最后输出的结果与的精确值不符.

(2)如果化为

再用MATLAB命令

 >> x=(7^15)*( (8^(-19))/(sqrt(1+8^(-19))+1))

运行后输出结果

 x = 1.6471e-005

这是因为化为后,计算机运行程序

>> x= (8^(-19))/(sqrt(1+8^(-19))+1)

运行后的结果为

x =3.4694e-018

由于有效数字的损失甚少,所以运算的结果再与继续计算,最后输出的结果与的精确值相差无几.

 

例1.4.2  求数的近似值.

解 (1)直接用MATLAB程序

>> x=30;x1= sqrt(x^2-1)

运行后输出结果

x1 = 29.9833

输入MATLAB程序

>> x=30; x1=29.9833;y=log(x-x1)

运行后输出结果

y = -4.0923

(2)因为中的很大,如果采用倒数变换法

即     

.

输入MATLAB程序

>> x=30;y=-log(x+sqrt(x^2-1))

运行后输出结果

y = -4.0941

(3)输入MATLAB程序

>> x=30; y=log(x-sqrt(x^2-1))

运行后输出结果

y = -4.0941

可见,(2)计算的近似值比(1)的误差小.

参加计算的数,有时数量级相差很大.如果不注意采取相应的措施,在它们的加减法运算中,绝对值很小的那个数经常会被绝对值较大的那个数“吃掉”,不能发挥其作用,造成计算结果失真.

 

例1.4.4  请在16位十进制数值精度计算机上利用软件MATLAB计算下面的两个数

将计算结果与准确值比较,解释计算结果.

解  在MATLAB工作窗口输入下面程序

>>  x=111111111111111+0.1+0.3, y=1111111111111111+0.1+0.3

运行后输出结果

 x = 1.111111111111114e+014,y =1.111111111111111e+015

从输出的结果可以看出,x,而y.为什么仅仅比多一位1,而y呢?

这是因为计算机进行运算时,首先要把参加运算的数写成绝对值小于1而“阶码”相同的数,这一过程称为数的“对阶”.在16位十进制数值精度计算机上利用软件MATLAB计算这两个数,把运算的数写成浮点规格化形式为

在16位十进制数值精度计算机上,三项的数都表示为小数点后面16位数字的数与之积,所以,计算机没有对数进行截断,而是按原来的三个数进行计算.因此,计算的结果.而

三项的数都表示写成绝对值小于1而“阶码”都为的数以后,第一项的纯小数的小数点后面有16位数字.但是,后两项数的纯小数的小数点后面有17位数字,超过了16位十进制数值精度计算机的存储量,计算机对后两项的数都进行截断最后一位,即后两项的数都是16位机上的零,再进行计算,所以计算结果与实际不符.

欢迎转载,转载请注明来自一手册:http://yishouce.com/book/3/3010400.html
友情链接It题库(ittiku.com)| 版权归yishouce.com所有| 友链等可联系 admin#yishouce.com|粤ICP备16001685号-1