线性代数机算的速度与精度.ppt

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性代数机算的速度与精度

线性代数机算的速度和精度 机算中精度和速度的重要性 在用笔算时,通常都用整数矩阵来演示和做题,几乎不涉及误差,也就没有精度问题。至于矩阵计算速度的低下,即使在二、三阶的低价矩阵中,就已暴露无遗,但那从来不是纯粹进行理论探讨的数学家所关心的内容,甚至很怕读者触及这个敏感问题,这是用笔算解矩阵方程的根本弱点。承认这个弱点必然导致计算机的引入和课程的改造。 线性代数进入应用领域,必定要使用计算机,速度和精度两个现实问题就不可避免地摆在我们面前。在这里,我们将注重精度问题,并只着重于MATLAB命令中包含的、或会对计算精度作出提示的问题做一介绍。 1.双精度浮点数的精度 按照IEEE标准,表达一个数需要8个字节,也就是64个二进制位。双精度浮点数η用下式表示 其中M是一个小于一大于1/2的二进制分数,称为尾数,占用52个二进制位表示; 而指数E是一个带符号的二进制整数。占11个二进制位,总共可表示2048个整数,即可以表示从-1023到+1024的数集,它决定了数的动态范围。数的正负号反映在S上,它只占一位。总计1+52+11=64位。 MATLAB中数的精度 浮点数的量化步长可以代表它的相对精度。它是由M的位数决定的。52位二进制数的量化步长是2 -52=2.2204×10 –16。该数的动态范围取决于指数部分。因为2 –1023≈10 –307及21024≈10308。所以MATLAB中数的动态范围为2.2251×10 -308~1.7977×10+308。在MATLAB命令窗中,键入eps, realmin, realmax,系统就会给出上面的几个数。 MATLAB中运算的精度 在做浮点加法、乘法、除法运算时,相对误差可以基本不变。由于多次运算造成误差的积累,MATLAB中的大部分运算结果的误差比eps 要大一些。因此正常情况下(即系统不给出警告时),计算结果至少可以有12位十进制有效数字的可信度。但是减法有时会有问题,如果遇到两个很接近的大数相减,把有效数位中的前N位都消掉了,那么数字的精度就减少了N位。比如12345-12344=1,这两个数具有5位有效数位,但它们的差只有一位有效。 2.高斯消元法中的精度问题——主元交换法(partial Pivoting) 设方程组如下,写成矩阵形式: 用消元法化简增广矩阵C=[A,B] 由此得知 x=10000/10001=0.9999; y=10000/10001=0.9999,这是手算的精确解。 计算机舍入误差造成消元误差 假如我们采用的是一个很粗糙的计算机,只能保持三位有效数字,那么它遇到10001时,只会四舍五入解读为10000。则上面的消元过程将成为: 这个结果将解读为??x=0, y=1,x的误差达到了100%,完全不能采用。如果计算机的精度是N位,其结果虽然不至于完全无用,但也将使有效数位减少4位。 主元太小是造成误差的根源 从计算过程看,其实问题就出在回代过程中出现了相接近的两个大数相减。两个大数出现于把微小的主元0.0001化为1的消元过程中,主元太小是造成误差的根源。如果在做消元法的时候,检查主元行中各个元素,把最大的主元通过列交换放到主元的位置,那样这个问题就可以解决,例如上题中先交换第一行中的两列,可得: 在rref函数中的换主元措施 由此得知 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=A\B, 得到 X= [0.9999; 0.9999] 键入type rref得出的主要程序代码 while (i = m) (j = n) % Find value and index of largest element in the remainder of column j. [p,k] = max(abs(A(i:m,j))); k = k+i-1; if (p = tol) % The column is negligible, zero it out. A(i:m,j) = zeros(m-i+1,1); j = j + 1; else % Remember column index jb = [jb j]; % Swap i-th and k-th rows. A([i k]

您可能关注的文档

文档评论(0)

jixujianchi + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档