欢迎来到天天文库
浏览记录
ID:34395736
大小:504.00 KB
页数:6页
时间:2019-03-05
《线性代数机算中的速度和精度问题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、肇节莁蚁膀肄虿蚀衿芀薅蚀羂肃薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膁莅蒄螅袀膇莀螄羃莃芆螃膅膆蚄螂袅蒁薀螁羇芄蒆螀聿蒀莂蝿膁节蚁蝿袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈肂蚄袄肀莇薀袃膂膀蒆袃袂莆莂袂羄膈蚀羁肇莄薆羀腿膇蒂罿衿莂蒈薆肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇节莁蚁膀肄虿蚀衿芀薅蚀羂肃薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膁莅蒄螅袀膇莀螄羃莃芆螃膅膆蚄螂袅蒁薀螁羇芄蒆螀聿蒀莂蝿膁节蚁蝿袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈肂蚄袄肀莇薀袃膂膀蒆袃袂莆莂袂羄膈蚀羁肇莄薆羀腿膇蒂罿衿莂蒈薆肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿
2、蒅薂肇节莁蚁膀肄虿蚀衿芀薅蚀羂肃薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膁莅蒄螅袀膇莀螄羃莃芆螃膅膆蚄螂袅蒁薀螁羇芄蒆螀聿蒀莂蝿膁节蚁蝿袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈肂蚄袄肀莇薀袃膂膀蒆袃袂莆莂袂羄膈蚀羁肇莄薆羀腿膇蒂罿衿莂蒈薆肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇节莁蚁膀肄虿蚀衿芀薅蚀羂肃薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膁莅蒄线性代数机算中的速度和精度问题在用笔算时,通常都用整数矩阵来演示和做题,几乎不涉及误差,也就没有精度问题。至于矩阵计算速度的低下,即使在二、三阶的低价矩阵中,就已暴露无遗,但那从
3、来不是纯粹进行理论探讨的数学家所关心的内容,甚至很怕读者触及这个敏感问题,这是用笔算解矩阵方程的根本弱点。承认这个弱点必然导致计算机的引入和课程的改造。线性代数进入应用领域,特别是使用计算机后,速度和精度两个现实问题就不可避免地摆在我们面前。此外,还有一个计算稳定性(或可靠性)的问题。一.精度问题1.双精度浮点数的表示方法及其精度要理解科学计算中的精度问题,必须首先建立一个概念:计算机对数的表述和运算都是有误差的。对于MATLAB而言,它用二进制双精度浮点格式来表达一个数。按照IEEE标准,表达一个数需
4、要8个字节,也就是64个二进制位。双精度浮点数η用下式表示其中M是一个小于一大于1/2的二进制分数,称为尾数,占用52个二进制位表示;而指数E是一个带符号的二进制整数。占11个二进制位,总共可表示2048个整数,即可以表示从-1023到+1024的数集,它决定了数的动态范围。数的正负号反映在S上,它只占一位。总计1+52+11=64位。浮点数的量化步长可以代表它的相对精度。它是由M的位数决定的。52位二进制数的量化步长是2–52=2.2204×10–16。该数的动态范围则取决于指数部分。因为2–1023
5、≈10–307及2+1024≈10+308。所以MATLAB中数的动态范围为2.2251×10-308~1.7977×10+308。在MATLAB命令窗中,键入eps,realmin,realmax,系统就会给出上面的几个数。在做浮点运算时,除非出现大数相减,相对误差可以基本不变。由于多次运算造成误差的积累,MATLAB中的大部分运算结果的误差比eps要大一些。因此正常情况下(即系统不给出警告时),计算结果至少可以有12位十进制有效数字的可信度。但是如果遇到两个很接近的大数相减,把有效数位中的前N位都消
6、掉了,那么数字的精度就减少了N位。比如12345-12344=1,前两个数可能具有5位有效数位,但它们的差只有一位有效。2.高斯消元法中的精度问题(主元的部分交换partialPivoting)举一个简单的例子,设方程组如下,写成矩阵形式:用消元法化简增广矩阵C=[A,B]由此得知x=10000*10000/10001=0.9999;y=10000/10001=0.9999,这是手算的精确解。假如我们采用的是一个很粗糙的计算机,只能保持三位有效数字,那么它遇到10001时,只会解读为10000。则上面的
7、消元过程将成为:这个结果将解读为 x=0,y=1,x的误差达到了100%,完全不能采用。如果计算机的精度是N位,其结果虽然不至于那么惨,但也将使有效数位减少4位。现在来看问题出在什么地方?有什么办法可以避免?从计算过程看,其实问题就出在回代过程中出现了相接近的两个大数相减。两个大数出现于把微小的主元0.0001化为1的消元过程中,可见消元过程中主元太小是造成误差的根源。如果在做消元法的时候,检查主元行中各个元素,把最大的主元通过列交换放到主元的位置,那样这个问题就可以解决,例如上题中先交换第一行中的两
8、列,可得:由此得知x=10000/10001=0.9999;y=0.9999,这和精确解完全一致,说明只要进行主元最大的列交换。计算精度是可以保证的。在rref命令中,语句[p,k]=max(abs(A(i:m,j)));就是为了在第i行中,找到绝对值最大的元素A(i,k),以后再进行列交换。在MATLAB命令窗中键入:A=[0.0001,1;-1,1],B=[1;0],X=AB,得到X=[0.9999;0.9999]3.由矩阵奇异性造成
此文档下载收益归作者所有