Transcript 第一章绪论
数 值 分 析 (第 4 版) 李庆扬 王能超 易大义 编 清华大学出版社 施普林格出版社 1 • 数值分析课程 • 教师:罗蕴玲 • 学时:50+10 • 电话:81720522 • 讲课时间:3~16周 • E-mail: • 上机时间:16~18周 • 平时成绩:上机 测验 [email protected] • 办公室:1-812 作业 答疑时间: 出勤 周一下午2:30-4:30 • 期末考试:半开卷 周三下午3:30-5:00 具体考核方案 2 第1章 绪 论 1.1 数值分析研究对象与特点 3 先看两个例子。 例1 求方程 x2=2sinx,在区间(1,2)内的根。 理论上可知显然找不出根的解析式,即无法求出 精确解。 例2 用Cramer法则求解n元线性方程组。 显然理论上可行,且有精确表达式。实际计算时 会出现什么问题呢? 4 看用数学和计算机解决实际问题的过程: 实际问题 应用数学研究的任务 数学模型 数值计算方法 数值分析研究的对象 上机计算求出结果 最终提供的是针对各类数学问题的数值算法 (即计算公式、计算方案、计算过程) 5 数值分析提供的算法具有下面四个特点: 1、面向计算机 2、有可靠的理论分析 3、具有好的计算复杂性 4、通过数值实验验证有效性 6 本门课程学习的主要内容: 误差分析,插值法与拟合,数值积分,数值微分, 解线性方程组的直接方法和迭代方法,非线性方程求根, 矩阵特征值问题计算. 7 1. 认识建立算法和对每个算法进行理论分析是基本 任务,主动适应“公式多”的特点; 2. 注重各章建立算法的问题的提法,搞清问题的基 本提法,逐步深入; 3. 理解每个算法建立的数学背景,数学原理和基本 线索,对最基本的算法要非常熟悉; 4. 认真进行数值计算的训练,学习各章算法完全是 为用于实际计算,必须真会算。 8 • 本课程的基本要求 – 掌握数值方法的基本原理 – 掌握常用的科学与工程计算的基本方法 – 能用所学方法在计算机上算出正确结果 9 课程学习结束后你具备的能力 1. 对具体的数值计算问题,你会选择合适 的算法,并通过计算机计算出正确结果; 2. 对给定的算法会从理论上分析其优劣性; 3. 会根据原理构造解决较简单数值计算问 题的算法。 10 1.2 数值计算的误差 1.2.1 误差来源与分类 引言——为什么要进行误差分析? 例1 用具有舍入功能的八位计算器直接计算下式: y arctan5430 arctan5429 结果为 y arctan5430 arctan5429 1.5706122 1.5706121 0.000000 1 6个 零 事实上 y arctan5430 arctan5429 0.0000000 3392191 7个 零 结果 不可靠 11 例2 用求根公式在尾数为八位的浮点计算机上,求下面方程的根: x 2 (109 1) x 109 0 解 b b 2 4ac b b 2 4ac x1 , x2 2a 2a 计算机上 10 10 b 109 1 0.1 1010 0.000000000 1 10 = 0 . 1 10 9个 零 b 2 4ac (0.1 1010 )2 4 1 109 (0.1 1010 )2 4 0.1 1010 19 19 0.1 1019 0.00000000 4 10 0 . 1 10 8个 零 求得 计算机上 x1 0, x2 0.1 1010 109 9 x 1 , x 10 事实上 1 2 12 用计算机解决实际问题的一般过 程 应用数学解决的问题 实际问题 建立数 学模型 模型误差、观测误差 数值分析解决的问题 确定数 值解法 截断误差 上机求解 舍入误差 在此主要研究这两种误差 13 1.2.2 误差与有效数字 一、绝对误差 定义1 设 为准确值, x x * 为 x的一个近似值,称 e* x * x 为近似值的绝对误差, 简称误差. 误差 可正可负,当绝对误差为正时近似值偏大,叫 e* 强近似值;当绝对误差为负时近似值偏小,叫弱近似值. 通常准确值 是未知的, x 因此误差 e也未知. * 若能根据测量工具或计算情况估计出误差绝对值的一个上 界,即 e * x * x *, 则 叫做近似值的误差限, * 它总是正数. 14 对于一般情形 也可以表示为 x * , x * 即 x * * x x * *, x x * * . 1 1 1 2 1 例3 求 3的近似值,使其绝对误差限精确到 10 , 10 , 10 3. 2 2 2 解 因为 3 1.73205 ,而 1 101 2 1 * (1.73) 3 1.73 0.00205 0.005 10 2 2 1 * (1.732) 3 1.732 0.00005 0.0005 10 3 2 * (1.7) 所以 3 1.7 0.03205 0.05 x1* 1.7, x2* 1.73, x3* 1.732. 注意:(1)绝对误差限不是唯一的,但越小越好; (2)绝对误差限的大小并不能完全表示近似值的好坏。 15 二、相对误差 的比值 定义2 把近似值的误差 与准确值 x e* e* x*x x x 称为近似值 x的相对误差, * 实际计算中, er* 记作 er*. 由于真值 x总是未知的,通常取 e* x*x x* x* e* 作为 x的相对误差, * 条件是 | er* ||较小, | x* e* x * x , 知 此时利用 16 e* e* e * ( x * x) x x* x* x ( e*) 2 x * ( x * e*) ( e * / x*) 2 1 ( e * / x*) * 是 e的平方项级, 故可忽略不计. r 相对误差也可正可负,它的绝对值上界叫做相对误差限, 记作 , 即 * r * r * x* . 17 三、有效数字 当准确值 位数比较多时,常常按四舍五入的原则得 x 到 x的前几位近似值 , x * 例如 x π 3.14159265 3 * 0.002, 取3位 x3 * 3.14, 取5位 x5 * 3.1416, 5 * 0.000008, 它们的误差都不超过末位数字的半个单位, 即 1 10 2 , 2 1 π 3.1416 10 4. 2 π 3.14 18 若近似值 的误差限是某一位的半个单位, x* 定义3 该位到 x的第一位非零数字共有 位,就说 有 n * x *位有效数字. n 表示为 x* 10 m (a1 a2 10 1 an 10 ( n 1) ), (2.1) 其中 ai (i 1,是0到9中的一个数字, , n) 为整数, a1 0, m 且 x x* 1 10 m n 1. 2 (2.2) 例如 3.142,3.141,3.1416分别作为π的近似值时分别有几位 有效数字? 19 重力常数g, 例4 如果以 m/s2 为单位,g 9.80m/s 2 , 若以km/s2为单位, g 0.00980,它们具有几位有效数字? km/s 2 绝对误差和相对误差有区别吗?与量纲有关吗? 因为按第一种写法 g 9.80 1 10 2 , 2 按(2.1)的表示方法, m 0, n 3, 按第二种写法 g 0.00980 1 10 5 , 2 这里 m 3, n 3. 它们虽然写法不同,但都具有3位有效数字. 20 x* 10 m (a1 a2 10 1 an 10 ( n 1) ), (2.1) 至于绝对误差限,由于单位不同所以结果也不同, 1* 1 1 10 2 m/s 2 , 2* 10 5 km/s 2 , 2 2 但相对误差都是 r* 0.005 / 9.80 0.00005 / 0.00980. 注意相对误差与相对误差限是无量纲的,而绝对误差 与误差限是有量纲的. 例4说明有效位数与小数点后有多少位数无关. 21 从(2.2)可得到具有 位有效数字的近似数 ,其绝对 x* n 误差限为 1 * 10 m n 1 , 2 m n 1 在m 相同的情况下, 越大则 n 10越小,故有效位数越 多,绝对误差限越小. 1 x x * 10 m n 1. 2 (2.2) 22 关于有效数字说明 ① 用四舍五入取准确值的前n位x*作为近似值,则x*必有n位 有效数字。如3.142作为 的近似值有4位有效数字,而 3.141为3位有效数字; ② 有效数字相同的两个近似数,绝对误差不一定相同。例 如,设x1*=12345,设x2*=12.345,两者均有5位有效数字 但 绝对误差不一样 x - x1* = x - 12345 ≤ 0.5= 1/2 100 x - x2* = x - 12.345≤0.0005=1/210-3 ③ 把任何数乘以10 p(p=0,1,…)不影响有效位数; ④ 准确值具有无穷多位有效数字,如1/2=0.5 因0.5是真值, 没有误差,*=0,因此n,准确值具有无穷位有效数字。 23 四、有效数字与相对误差限的关系 * 定理1 设近似数 x表示为 x* 10 m (a1 a2 10 1 al 10 (l 1) ), 其中 ai (i 1, 是0到9中的一个数字, , l) 若 具有 x * 位有效数字, n (2.1) a1 0, m为整数. 则其相对误差限为 1 10 ( n 1) ; 2a1 * r 反之, 若 x 的相对误差限 * 1 , 10 ( n 1) 2( a1 1) * r 则 x至少具有 位有效数字. * n 24 例5要使 的近似值的相对误差限小于0.1%,需取 20 几位有效数字? 设取 位有效数字, n 由定理1 1 10 ( n 1). 2a1 * r 由于 20 4.4 , 知 a1 ,4 故只要取 n ,4 就有 r* 0.125 103 103 0.1%, 即只要对 的近似值取4位有效数字,其相对误差限就 20 小于0.1%. 此时由开方表得 20 4 . .472 25 1.2.3 数值运算的误差估计 一般情况下,当自变量有误差时函数值也产生误差, 其误差限可利用函数的微分进行估计. 设 的近似值为 ,以x * 近 f (x*) f是一元函数, (x) x 似 f (x ,其误差界记作 ) ( f, ( x*)) 利用微分 f ( x ) f ( x*) f ( x*)( x x*) o( x x*) 由此可得: df ( x ) | x x* o( x x*) e( f ( x*)) f ( x*) e( x*). ( f ( x*)) f ( x*) ( x*). f ( x*) x * f ( x*) er ( f ( x*)) e( x*) er ( x*). f ( x*) f ( x*) f ( x*) x * f ( x*) r ( f ( x*)) ( x*) r ( x*). f ( x*) f ( x*) 26 当 为多元函数,如计算 f x1 ,的近似值为 , xn A f (时, x1 , xn ) * * x, , , x 1 n 如果 则 A的近似值为 * A* f ( x1* , xn ), 于是由全微分, 函数值 A的误差 * e(为 A*) * e( A*) A * A f ( x1* ,, xn ) f ( x1 ,, xn ) * f ( x1* , , xn ) * ( xk xk ) xk k 1 n f x k k 1 n * * ek , 于是误差限 f ( A*) k 1 x k n * ( xk* ); 27 而 A 的相对误差及相对误差限限分别为 * er* er ( A*) e( A*) A* * f x k k 1 e( x k* ) A* n f k 1 x k n r* r ( A*) ( A*) f A* k 1 x k n f k 1 x k n * x k* er ( x k* ) A* * ( x k* ) A* * xk* r ( xk* ) A* 28 练习: 1. y f ( x), y* f ( x* ),求er ( y* ); 2. y x n , y* ( x* )n , 求er ( y* ); 3. D1 10 0.05(cm), D2 5 0.1(cm), S 4 ( D D ),求 ( S )和 r ( S ); 2 1 2 2 * * x 4. (1)u x y ( 2)u xy ( 3)u y 求e( u* )和er ( u* ) . 5. 测量一木板长为954cm,问测量的相对误差 是多大? 29 1.3 误差定性分析与避免误差危害 1.3.1 病态问题与条件数 对一个数值问题本身, 如果输入数据有微小扰动(即误 差),引起输出数据(即问题解)相对误差很大,这就是病 态问题. 例如计算函数值 f时, (x) 若 x有扰动 x x ,其 x* 相对误差为 x, 函数值 f (x的相对误差为 *) x f ( x) f ( x*) . f ( x) 30 相对误差比值 f ( x) f ( x*) x x f ( x) / Cp , f ( x) x f ( x) (3.1) C称为计算函数值问题的条件数. p 自变量相对误差一般不会太大,如果条件数 很大, Cp 将引起函数值相对误差很大,出现这种情况的问题就是病态 问题. 31 例如, f ( x), x n 则有 x nx n 1 x f ( x) n, Cp n x f ( x) 它表示相对误差可能放大 n倍. 如 n, ,) 1.24 10 有 f (1) 1, f (1.02 若取 x 1, , 函数值相对误差为 24, % x* 1.02, 自变量相对误差为 2% 这时问题可以认为是病态的. 一般情况下,条件数 越大C p C 就认为是病态, p 10 病态越严重. 32 1.3.2 算法的数值稳定性 用一个算法进行计算,如果初始数据误差在计算中传播 使计算结果的误差增长很快,这个算法就是数值不稳定的. 例6计算 In 1 0 x ne x 1并估计误差. dx ( n 0,1, ) 由分部积分可得计算 的递推公式 In I n 1 nI n1 I0 e 1 1 0 (n 1,2,), (3.2) e x dx 1 e 1. 问题:由递推公式(3.2)可以构造几种计算积分序列{In}(n=1,2, …,N)的算法?假设计算中只有初始值带有误差,计算过程中不 产生新的误差,请判断哪种方法能给出更精确的结果。 33 算法A:计算公式为 I n 1 nI n1 ( n 1,2,, N ) ~ 若初值 I~有误差 则由此引起以后各步计算的误差 E0 I 0 I 0 0 ~ En nEn 1 (n 1,2,). 满足关系 En I n I n n! 则 En (1) n n! E0 , 这说明 I~的误差被放大了 倍. n 1 In 算法B:计算公式为 I n1 n 1 * * * 记 En* I, 则 ,En E I 0 n n n! n! 倍。 ( n N ,2, ,1) * E0* 比 E缩小了 n 看数值计算结果,见书p13. 显然算法B的计算结果更精确、更可靠,当用算法A计算时, 由于误差传播是逐步扩大的,因而计算结果不可靠. 此例说明,数值不稳定的算法是不能使用的. 34 一个算法如果输入数据有误差,而在计算过 定义4 程中舍入误差不增长,则称此算法是数值稳定的,否则称 此算法为不稳定的. 在例6中算法(B)是数值稳定的,而算法(A)是不 稳定的. 35 1.3.3 避免误差危害的若干原则 数值计算中首先要分清问题是否病态和算法是否数 值稳定,计算时还应尽量避免误差危害,防止有效数字 的损失,有下面若干原则. 1. 要避免除数绝对值远远小于被除数绝对值的除法 x 用绝对值小的数作除数舍入误差会增大,如计算 若 , y 0 y, x , * * * * x* e ( x ) x e ( y ) 1 | x | * * e * | e ( x ) | | e ( y )| 则可能对计算结果带来 * * 2 * * 2 y y (y ) |y | (y ) 严重影响,应尽量避免. 36 2. 要避免两相近数相减 在数值计算中两相近数相减有效数字会严重损失. 分析前述例1 y arctan5430 arctan5429 1.5706122 1.5706121 0.000000 1 8位有效数字 8位有效数字 0位有效数字 6个 零 y arctan 5430 arctan 5429 0.0000000 3392191 7个 零 这说明必须尽量避免出现这类运算. 最好是改变计算方法, 防止这种现象产生. 37 由 arctan arctan arctan ,可得 改变计算公式: 1 1 arctan5430 arctan5429 arctan 3.3921911 10 8 29479471 精度提高了很多。此例说明,可通过改变计算公式避免或 减少有效数字的损失。 类似地,如果 和 x1 很接近时,由 x2 x1 lg x1 lg x2 lg , x2 用右边算式有效数字就不损失. 当 很大时, x x 1 x 也应该用右端算式代替左端. 1 x 1 x , 38 3. 要防止大数“吃掉”小数 在数值运算中参加运算的数有时数量级相差很大, 而计算机位数有限,如不注意运算次序就可能出现大数 “吃掉”小数的现象,影响计算结果的可靠性. 前面用求根公式求根的例2中, 109 吃掉了1, 现改变计算公式如下: b x1 b b 2 4ac ,b 0 2a , b 2 4ac ,b 0 2a c/a x2 x1 39 4. 注意简化计算步骤,减少运算次数 同样一个计算问题,如果能减少运算次数,不但可节省 计算机的计算时间,还能减少舍入误差. 这是数值计算必须遵从的原则,也是“数值分析”要研 究的重要内容. 40 例7 计算多项式 Pn ( x) an x n an 1 x n 1 a1 x a0 k 的值, 若直接计算 ak x再逐项相加,一共需做 n(n 1) n (n 1) 2 1 2 次乘法和 n次加法. 若采用秦九韶算法 Pn ( x ) x (an x n1 an1 x n 2 a1 ) a0 x ( x ( x (an x an1 ) an 2 ) a1 ) a0 S n an , S k xS k 1 a k ( k n 1, ,2,1,0), P ( x) S , 0 n 只要 n次乘法和 次加法就可算出 n Pn的值. (x) 在“数值分析”中,这种节省计算次数的算法还有不少. 41