第二章数值计算的基本概念
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算结果的精度要求影响不大。
• 要防止大数吃掉小数 。
• 要避免两相近数相减。
• 要避免除数绝对值远小于被除数绝对值 。
• 注意简化计算步骤,减少运算次数 。
§2.3 计算方法及其计算复杂性
实验 2.4 (从行列式的计算看算法的重要性)
实验目的: 通过实验体会使用计算机进行数值计算中算法的 重要地位。
第二章 数值计算的基本概念
2.1 浮点数与舍入误差 2.2 计算机算术的若干问题
2.3 计算方法及其计算复杂性
2.4 算法的稳定性 2.5 问题的病态性
数值计算的基本概念
构造算法的基本手段:近似。
研究算法的核心问题:近似对计算结果的影响。
计算地球表面公式:
A 4 r
2
包含了许多近似。
A 模型:地球被看成一个球,这是简单的理想模型,与 实际情况差别很大。
1 En n
算法二: E N 0 , E n1
, n N , N 1, , 3, 2,1
实验要求 分别由以上两种算法,采用 5、6、7 位有效数字, 判断哪一种算法的计算结果更精确。
实验分析 实际和直觉完全相反! 算法一: E1 的初始误差为 e1 ,第 n 步以后为 en n ! e1 。 算法二: E N 的初始误差为 N ,第 m 步以后为 m N /( N !/ m !)
T2 h
2
3!
f ( x0 ) O ( h )
3
比较两种算法,后者比前者好。
注意: 在实际计算中, 并不是所有计算都是 h越小越好, 如图 P25,2.3 图。
§2.2 计算机算术的若干问题
2.2.1 误差与有效数字
*
定义 1 设 x 是某实数的精确值, x 是它的一个近似值, x x * * * 则 e x x 称为近似值 x 的绝对误差, 简称误差。 称 x * 为 x 的相对误差。注意当 x 0 时,相对误差没有意义。实
*
*
k n
*
则称 x 为 x 的具有 n 位有效数字的近似值, x 具有 n 位 且 有效数字。
有效数字的位数: 如果近似值 x 的误差界 是某一位上的半个单位,则若
*
该位到 x 的第一位非零数字共有 n 位,称 x 具有 n 位有效数 字。
*
*
相对误差界: 若用式子
x 10 0.a1a2a3 an
2
(2.1.3)
(2.1.1)中用上式左端近似 f ( x0 ) ,误差总数存在,但 步长越小时,(2.1.1)的近似程度越好.(2.1.3)中的
T1 h 2! f ( x0 ) O ( h )
2
(2.1.4)
称为算法(2.1.1)的截断误差。它来源于有限差分替代了 无限的过程。
类似地:可以分析(2.1.2)的截断误差,其结果为
其中, 2
t
。
2.2.4 数值运算的误差估计
( x1 x2 ) ( x1 ) ( x2 )
*
*
*
*
*
ห้องสมุดไป่ตู้
( x1 x2 ) x1 ( x2 ) x2 ( x1 )
* * * * *
(
x1
* *
)
x1 ( x2 ) x2 ( x1 )
实验分析:不论采用怎样的算法,计算结果通常总是 有误差,如对算法(2.1.1),由泰勒 有
f ( x0 h) f ( x0 ) hf ( x0 ) h
2
2!
f ( x0 ) O ( h )
3
所以有
f ( x0 h) f ( x 0 ) h f ( x 0 ) h 2! f ( x0 ) O ( h )
|x |
定义 3 设 x 是 x 的一个近似值,写成:
*
x 10 0.a1a2a3 an
* k
它可以是有限或无限小数的形式。其中 ai( i 1, 2 , n ) 是 0,1, , 9 中的数字,且 a1 0 ,k 为整数。如果 x 满足条件:
*
x x 0.5 10
k 1
n
f * ( xk ) x k
*
*
相对误差界为:
r r(A )
* *
(A )
*
A
*
k 1
n
* f ( x k ) * x k A
2.2.6 数值运算中的一些原则
•
要有数值稳定性 : 在计算过程中误差不会扩大或对
Matlab 中数的范围 2 体数称为浮点数。
1022
x2
1023
,这一区间的全
舍入误差:实数中的绝大部分在计算机上总不能精确 表出,总要经过“舍”或“入” ,由一个与之相近的浮点 数代替,由此引起的误差称为舍入误差,这也是误差的主 要来源。
实验 2.1
(数值微分精度及步长的关系)
实验目的:数值计算中的误差是不可避免的,通过实 验初步认识数值分析中的两个重要概念:截断误差和舍入 误差,并认真体会误差对计算结果的影响。
s s t
fl ( x ) x (1 ) ,其中 2 。
2.2.3 舍入误差的精度表示
产生:计算机表示的实数受限于尾数的固定精度,故不得 不舍入而近似表示真值,产生舍入误差。 用 表示 + 、—、× 、÷中任一种运算(除法中分母不 为零) ,则有
fl ( fl ( x ) fl ( y )) ( fl ( x ) fl ( y ))(1 )
实验内容 和式(2.3.1)共有 n !项,按行列式的定义计算一个 n 阶 行列式需要乘法次数为
( n 1)n !
现有的较大规模的计算机(10 次/秒浮点运算)及将要面世的 万亿次机(及浮点运算 10 列式?
12
9
次/秒) ,问它们分别能算多大规模的行
实验要求 核算一下如果按行列式定义计算行列式,计算机的 能力有多大,再使用 Matlab 软件尝试计算行列式,能计算多大的 行列式?
( A ) 为:
*
( A ) A A f ( x1 , x2 , , xn ) f ( x1 , x2 , , x n )
* * * * *
k 1
n
* * * f ( x1 , x2 , , xn ) * ( xk xk ) x k
2 1, 2 1 , 则 存 在 一 个 与 x 最 接 近 的 形 如
2 0. 1 2 t 的机器数,记为 fl ( x ) ,它就是实数 x 的机器数
k
表示。 设 x R ,2
1
x 2 , [ 2 1, 2 1],则存在 ,使得
问题提出:设一元函数 f 为
f ( x0 ) lim
h 0
: R R ,则 f
在 x0 的导数定义
f ( x0 h) f ( x 0 ) h
。
实验内容:计算在 x0 的导数值可以用算法
f ( x 0 ) f ( x0 h) f ( x 0 ) h
(2.1.1)
或
f ( x 0 ) f ( x0 h) f ( x 0 h) 2h
B 测量仪器的误差:地球半径要经过测量得到,无论使 用什么手段,其误差是无法避免的。
C 截断误差:公式中的 是物理数,在计算机中无法精 确表示,只能将它截断到有限字长。
D 舍入误差:输入的数据和公式的计算都被舍入。
§2.1 浮点数与舍入误差
计算机中的数二进制表示,使用 IEEE 国际通用标 准。进行数值计算,并不需要时刻关注这这样的细节,但 了解其特殊性,对建立数值计算的基本概念十分重要。
0
1
1
x 1
dx
即
E n 1 nE n1 , n 2, 3,
(2.4.2)
En
。
1
x e
n
x 1
dx
0
1
x dx
n
1 n1
(2.4.3)
0
实验内容 由递推关系可以得到{ E n }的两种算法。 算法一: E1
1 e
, E n 1 nE n1 , n 2, 3,。
* * * *
x2
x2
*
2
2.2.5 函数的误差估计
x1 , x2 , , xn 为 x1 , x2 , , xn 的 近 似 值 , 则 函 数
A f ( x1 , x2 , , x n ) 的 近 似 值 A f ( x1 , x2 , , xn ) 的 误 差 界
* * * * * * *
实验内容 Matlab 的两个函数“roots”和“poly”. u=roots(a),a 为(n+1)维向量,则该函数的输出一个 n 维向量。 设
*
际上精确值 x 往往是未知的,所以常常把 对误差。
x x x
*
*
作为 x 的相
*
定义 2 设 x 是某实数的精确值, x 是它的一个近似值, 若 x 的绝对误差满足 x x ,则称 是 x 的绝对误差界,
* * * * *
*
简称误差界。称 r
*
* *
为 x 的相对误差界。
*
实验分析 计算机的速度虽然很快,但硬件处理能力还是很有 限。只有算法适当才能发挥其效率。 解线性方程组 AX B 的 Cramer 法则 Dx xi | A| 并不适合于数值计算,如果方程组的阶数很高,甚至于无法计算。
§2.4 算法的稳定性
实验 2.5 (误差传播与算法稳定性)
实验目的: 体会算法的稳定性在选择算法中的地位。
* k
表示的近似数 x 具有 n 为有效数字,则其相对误差界满足:
*
r
*
* *
1 2a1
10
( n 1)
x
2.2.2 计算机的浮点数表示
机器数:计算机所能表示的数的集合。 机器数的二进制浮点表示为:2 0. 1 2 t ,其中 k 称为
k
阶。 用二进制表示 k 有 k 1 2 s 。其中 1 1 , j 0 或 1
(2.1.2)
给出几个计算高阶导数的近似算法,并完成如下工:
1. 对同样的 h,比较(2.1.1)和(2.1.2)的计算结果。 2. 针对高阶导数的算法, 比较 h取不同值的计算结果。
实验要求:选择具有代表性的函数 f ( x ) (最好选择多 个) ,利用 Matlab 提供的绘图工具画出该函数在某个区间 的导数曲线 f ( s ) ( x ),再将数值计算的结果用 Matlab 画出来, 认真思考实验的结果。
问题提出 考虑一个积分序列 En
1
x e
n
x 1
dx
(2.4.1)
0
显然 E n 0, n 1, 2,。当 n 1 时,经分部积分得到
E1
对 n 2 ,经分部积分可得
En
1
xe
x 1
dx
1 e
0
1
x e
n
x 1
dx x e
n
x 1
1 0
0
nx e
问题提出 设有矩阵 A ( aij )nn ,其行列式
det( A)
( i1 , i2 ,, in )
( 1) ai ai ai
1 2
(2.3.1)
n
其中 代表正整数1, 2, , n 排列的全体构成的集合 (该集合共有 n !个 元素) 为正整数,由 i1 , i2 , , in 的次序决定。 ,
k 1
(2.5.1)
显然,该多项式全部的根为1, 2, , 20 ,共 20 个,且每一个根都是 单重。现考虑多项式的一个扰动
P( x) x
19
0 (2.5.2)
19
其中, 为很小的正数,相当于(2.5.1)的 x 项系数有一个小扰动。 比较(1.5.1)和(2.5.2)根的情况。
0. ( j 2, 3, t ) s 是阶的位数, 1 2 t 称为尾数, 1 1, , 且
, j 0 或 1( j 2, 3, t ) t 是尾数部位的位数。s 和 t 与具体的 机器有关。
实数的机器数: 对于非零实数 x 作估计 2
s s
1
2 ,其中 为整数。若
m N 1, N 2, , 3, 2,1
第一种算法的误差随着 n 的增大而增大, 第二种算法的误差不超 过初始误差,且随着 m 的减小而减小。
§2.5 问题的病态性
实验 2.6 (病态问题)
实验目的: 体会什么是数值计算中的病态问题。
问题提出 考虑一个高次代数多项式
20
P ( x ) ( x 1)( x 2) ( x 20) ( x k )