数值分析误差的来源和有关误差电子教案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.把 0.01 一个一个直接 加到 1234567.0上
t=1234567.0 do i=1,100 t=t+0.01 enddo write(*,*)t
结果为 1234567.0
2. 先把 100 个 0.01 加在 一起,然后再加到 1234567.0上
t=0.0 do i=1,100 t=t+0.01 enddo t=t+1234567.0 write(*,*)t
排长对班长: 明晚8点,营长将带着哈雷彗星在礼堂中出现,这是每隔 76年才有的事。如果下雨的话,营长将命令彗星穿上野战服到操场上 去。
班长对士兵: 在明晚8点下雨的时候,著名的76岁哈雷将军将在营长的 陪同下身着野战服,开着他那“彗星”牌汽车,经过操场前往礼堂。
思考题:
用正确方法编程计算 ln10000001 ln10000000
• (ab)=ab, • r(ab)= [a/(ab)]ra+[b/(ab)]rb(近似数相减
不稳定)
• (ab) ba+ab
• r(ab) ra+rb • (a/b) (1/b)a(a/b2)b (b 0不稳定) • r(a/b) rarb
减少计算误差的措施
一 避免两个大数相减
例1:计算 12345.0008 – 12345.0002
5I1;,
I10
1 10
5I
9
t=0.182 do i=1,10 t=1.0/i-5.0*t enddo write(*,*)t
I10 真实值约为0.0167 , 计算结果却为 -3140.224 Why ?
求I1时, I0的误差被放大5倍
求I2时, I0的误差被放大52倍
求I10时, I0的误差被放大510 倍
例:计算50.1+1.45+0.5812=? 修约为:50.1+1.45+0.58=52.13=52.1
2. 乘除法
以有效数字最少的数据为基准,其他数据多保留
一位有效数字,再进行乘除运算,计算结果仍保留最 少的有效数字。
例:计算0.0121×25.64×1.05728=? 修约为:0.0121×25.64×1.057=? 计算后结果为:0.327927908,结果仍保留为三位 有效数字。
结果为 1234568.0
四 好的运算方案能控制误差的传播放 大,减少计算步骤.
例6: 计算 ax3 bx2 cx d
不良运算方案 Write(*,*)a*x**3+b*x**2+c*x+d
一共6次乘法,3次加法.
良好运算方案
ax3 bx2 cx d (ax b)x cx d ,
write(*,*)1000.0/(sqrt(1000001.0)-1000) 结果为 2048000.0
1000
1000 ( 1000001 1000000)
1000001 1000000
write(*,*)1000.0*(sqrt(1000001.0)+1000)
结果为 2000000.0 可见,直接计算的误差很大.
write(*,*) 12345.0008 - 12345.0002 pause end
结果为 0.00097656
例2:计算 100000001 100000000
当x很小时:1 x 1 x 2
100000001 100000000 0.510-4
直接计算 write(*,*) sqrt(100000001.0) - 10000.0
它们之间的误差 观测误差:模型中所含数据大都由实验或观测得
到,受条件限制也会有误差 这里,我们专门讨论数值计算中的误差,不考虑
上述两类误差,即假定所利用的模型和数据是恰 当、合理的.
截断误差(方法误差):求近似解 舍入误差:机器字长有限
计算规则 1. 加减法
以小数点后位数最少的数据为基准,其他数据比 它多保留一位,再进行加减计算,最终计算结果保留 最少的位数。
记录为:0.0121×25.64×1.056=0.328 例:计算2.5046×2.005×1.52=? 修约为:2.505×2.005×1.52=? 当把1.13532×10⒑保留3个有效数字时,结果为 1.14×10⒑ 运算中若有π、e等常数,以及√2.1/2等系数,其 有效数字可视为无限,不影响结果有效数字的确定。
计算积分
In
1 0
xn dx,其中 x5
n 0,1,2,,10
In
1 0
xn
5xn1 5xn1 dx x5
1 0
1
xn1dx 5
0
xn1 dx x5
1 n
5In1
11
I0
0
x
dx 5
ln 6 ln 5
0.182
(a)利用
In
1 n 5In1
来计算
I1
1 1
5I0
; I2
1 2
Write(*,*)((a*x+b)*x+c)*x+d 一共3次乘法,3次加法.
对于一般多项式
Pn (x) an xn an1xn1 a1x a0
(a) 直接计算每一项再求和:
计算
pn ( x)的值需作乘法次数:
n
(n
1)
2
1
n(n 2
1) ;
加法次数: n.
(b)秦九韶算法
其中利用了sin x x, cos x 1
write(*,*)sin(0.0003)/(1.0+cos(0.0003)) 结果为 0.00015000
三 防止大数吃小数。当两个绝对值相差很大的 数进行加法或减法运算时,绝对值小的数有可能 被绝对值大的数"吃掉".
例5: 计算 1234567加上100个0.01
Pn ( x) x( x( x ( x(an x an1 ) an2 a1 ) a0
计算
pn ( x)的递推公式:
S
Sn
k 1
an; xS k
ak1 ,
(k n, n 1,,2,1).
则 S0 pn( x), 计算 pn ( x)的值只需作 n次乘法n次加法。
例7: 控制误差被恶性放大的例子.
例4: 计算
1 cos x , sin x
x 0.0003
当x很小时,分子出现相近数相减,分母趋于零.
直接计算
write(*,*)(1.0-cos(0.0003))/sin(0.0003) 将以上算式变形
结果为 0.00019868
(1 cos x)(1 cos x) 1 cos2 x sin x x 0.00015 sin x(1 cos x) sin x(1 cos x) 1 cos x 2
利用公式
x 1 x
1
x 1 x
结果为 0
计算
1
100000001 100000000
write(*,*)1.0/(sqrt(100000001.0)+10000.0) 结果为 0.00004999
二 避免绝对值接近于零的数做分母
例3 : 计算 y
1000
1000001 1000000
直接计算 利用
值班军官对连长: 根据营长的命令,明晚8点哈雷彗星将在操场上空出 现。如果下雨的话,就让士兵穿着野战服列队前往礼堂,这一罕见的 现象将在那里出现。
连长对排长: 根据营长的命令,明晚8点,非凡的哈雷彗星将身穿野战 服在礼堂中出现。如果操场上下雨,营长将下达另一个命令,这种命 令每隔76年才会出现一次。
这个算法具有数值稳定性
据说,美军 1910 年的一次部队的命令传递是这样的:
营长对值班军官: 明晚大约 8点钟左右,哈雷彗星将可能在这个地区看 到,这种彗星每隔 76年才能看见一次。命令所有士兵着野战服在操场 上集合,我将向他们解释这一罕见的现象。如果下雨的话,就在礼堂 集合,我为他们放一部有关彗星的影片。
实际问题 物理模型 数学模型
数值分析方法
数值分析实际上就是介绍在计算机上解 决数学问题的数值计算方法及其理论。这门 课程又称为数值计算方法.
数值分析方法
计算机求结果
• Fortran
• C++
•Matlab
误差的来源和有关误差的基本概念
一 误差的来源和分类 模型误差:数学模型仅是实际问题的一个近似,
解:ln10000001 ln10000000 ln 10000001 ln1.0000001 10000000
当x 0时,ln(1 x) x
ln1.0000001 0.0000001
write(*,*)log(1.0000001)
结果为 0.00000012
若用 write(*,*)log(10000001.0)-log(10000000.0) 结果为 0.0000000
1 x10
1 x10
0
6
dx
0
x
dx 5
0
dx 5
1
1
66 I10 55
取
I10
1 2
1 66
t=0.01667
1 55
0.01667 利用
I n -1
1 5
1 n
- In
do i=10,1,-1
t=0.2*(1.0/i-t)
enddo write(*,*)t
结果为 I0 0.182
这个算法显然不具有数值稳定性
正确的算法在哪?
先求出I10,利用
I n -1
1 5
1 n
- In
求I
9时,
I10的误差被减小到
1 5
求I
8时,
I10的误差被减小到
1 5
2
I9
倍
1 5
1 10
-
I10
,Iபைடு நூலகம்8
1 5
1 9
-
I9
,
求I0时, I10的误差被减小到
1 5
10
倍
1 x10
t=1234567.0 do i=1,100 t=t+0.01 enddo write(*,*)t
结果为 1234567.0
2. 先把 100 个 0.01 加在 一起,然后再加到 1234567.0上
t=0.0 do i=1,100 t=t+0.01 enddo t=t+1234567.0 write(*,*)t
排长对班长: 明晚8点,营长将带着哈雷彗星在礼堂中出现,这是每隔 76年才有的事。如果下雨的话,营长将命令彗星穿上野战服到操场上 去。
班长对士兵: 在明晚8点下雨的时候,著名的76岁哈雷将军将在营长的 陪同下身着野战服,开着他那“彗星”牌汽车,经过操场前往礼堂。
思考题:
用正确方法编程计算 ln10000001 ln10000000
• (ab)=ab, • r(ab)= [a/(ab)]ra+[b/(ab)]rb(近似数相减
不稳定)
• (ab) ba+ab
• r(ab) ra+rb • (a/b) (1/b)a(a/b2)b (b 0不稳定) • r(a/b) rarb
减少计算误差的措施
一 避免两个大数相减
例1:计算 12345.0008 – 12345.0002
5I1;,
I10
1 10
5I
9
t=0.182 do i=1,10 t=1.0/i-5.0*t enddo write(*,*)t
I10 真实值约为0.0167 , 计算结果却为 -3140.224 Why ?
求I1时, I0的误差被放大5倍
求I2时, I0的误差被放大52倍
求I10时, I0的误差被放大510 倍
例:计算50.1+1.45+0.5812=? 修约为:50.1+1.45+0.58=52.13=52.1
2. 乘除法
以有效数字最少的数据为基准,其他数据多保留
一位有效数字,再进行乘除运算,计算结果仍保留最 少的有效数字。
例:计算0.0121×25.64×1.05728=? 修约为:0.0121×25.64×1.057=? 计算后结果为:0.327927908,结果仍保留为三位 有效数字。
结果为 1234568.0
四 好的运算方案能控制误差的传播放 大,减少计算步骤.
例6: 计算 ax3 bx2 cx d
不良运算方案 Write(*,*)a*x**3+b*x**2+c*x+d
一共6次乘法,3次加法.
良好运算方案
ax3 bx2 cx d (ax b)x cx d ,
write(*,*)1000.0/(sqrt(1000001.0)-1000) 结果为 2048000.0
1000
1000 ( 1000001 1000000)
1000001 1000000
write(*,*)1000.0*(sqrt(1000001.0)+1000)
结果为 2000000.0 可见,直接计算的误差很大.
write(*,*) 12345.0008 - 12345.0002 pause end
结果为 0.00097656
例2:计算 100000001 100000000
当x很小时:1 x 1 x 2
100000001 100000000 0.510-4
直接计算 write(*,*) sqrt(100000001.0) - 10000.0
它们之间的误差 观测误差:模型中所含数据大都由实验或观测得
到,受条件限制也会有误差 这里,我们专门讨论数值计算中的误差,不考虑
上述两类误差,即假定所利用的模型和数据是恰 当、合理的.
截断误差(方法误差):求近似解 舍入误差:机器字长有限
计算规则 1. 加减法
以小数点后位数最少的数据为基准,其他数据比 它多保留一位,再进行加减计算,最终计算结果保留 最少的位数。
记录为:0.0121×25.64×1.056=0.328 例:计算2.5046×2.005×1.52=? 修约为:2.505×2.005×1.52=? 当把1.13532×10⒑保留3个有效数字时,结果为 1.14×10⒑ 运算中若有π、e等常数,以及√2.1/2等系数,其 有效数字可视为无限,不影响结果有效数字的确定。
计算积分
In
1 0
xn dx,其中 x5
n 0,1,2,,10
In
1 0
xn
5xn1 5xn1 dx x5
1 0
1
xn1dx 5
0
xn1 dx x5
1 n
5In1
11
I0
0
x
dx 5
ln 6 ln 5
0.182
(a)利用
In
1 n 5In1
来计算
I1
1 1
5I0
; I2
1 2
Write(*,*)((a*x+b)*x+c)*x+d 一共3次乘法,3次加法.
对于一般多项式
Pn (x) an xn an1xn1 a1x a0
(a) 直接计算每一项再求和:
计算
pn ( x)的值需作乘法次数:
n
(n
1)
2
1
n(n 2
1) ;
加法次数: n.
(b)秦九韶算法
其中利用了sin x x, cos x 1
write(*,*)sin(0.0003)/(1.0+cos(0.0003)) 结果为 0.00015000
三 防止大数吃小数。当两个绝对值相差很大的 数进行加法或减法运算时,绝对值小的数有可能 被绝对值大的数"吃掉".
例5: 计算 1234567加上100个0.01
Pn ( x) x( x( x ( x(an x an1 ) an2 a1 ) a0
计算
pn ( x)的递推公式:
S
Sn
k 1
an; xS k
ak1 ,
(k n, n 1,,2,1).
则 S0 pn( x), 计算 pn ( x)的值只需作 n次乘法n次加法。
例7: 控制误差被恶性放大的例子.
例4: 计算
1 cos x , sin x
x 0.0003
当x很小时,分子出现相近数相减,分母趋于零.
直接计算
write(*,*)(1.0-cos(0.0003))/sin(0.0003) 将以上算式变形
结果为 0.00019868
(1 cos x)(1 cos x) 1 cos2 x sin x x 0.00015 sin x(1 cos x) sin x(1 cos x) 1 cos x 2
利用公式
x 1 x
1
x 1 x
结果为 0
计算
1
100000001 100000000
write(*,*)1.0/(sqrt(100000001.0)+10000.0) 结果为 0.00004999
二 避免绝对值接近于零的数做分母
例3 : 计算 y
1000
1000001 1000000
直接计算 利用
值班军官对连长: 根据营长的命令,明晚8点哈雷彗星将在操场上空出 现。如果下雨的话,就让士兵穿着野战服列队前往礼堂,这一罕见的 现象将在那里出现。
连长对排长: 根据营长的命令,明晚8点,非凡的哈雷彗星将身穿野战 服在礼堂中出现。如果操场上下雨,营长将下达另一个命令,这种命 令每隔76年才会出现一次。
这个算法具有数值稳定性
据说,美军 1910 年的一次部队的命令传递是这样的:
营长对值班军官: 明晚大约 8点钟左右,哈雷彗星将可能在这个地区看 到,这种彗星每隔 76年才能看见一次。命令所有士兵着野战服在操场 上集合,我将向他们解释这一罕见的现象。如果下雨的话,就在礼堂 集合,我为他们放一部有关彗星的影片。
实际问题 物理模型 数学模型
数值分析方法
数值分析实际上就是介绍在计算机上解 决数学问题的数值计算方法及其理论。这门 课程又称为数值计算方法.
数值分析方法
计算机求结果
• Fortran
• C++
•Matlab
误差的来源和有关误差的基本概念
一 误差的来源和分类 模型误差:数学模型仅是实际问题的一个近似,
解:ln10000001 ln10000000 ln 10000001 ln1.0000001 10000000
当x 0时,ln(1 x) x
ln1.0000001 0.0000001
write(*,*)log(1.0000001)
结果为 0.00000012
若用 write(*,*)log(10000001.0)-log(10000000.0) 结果为 0.0000000
1 x10
1 x10
0
6
dx
0
x
dx 5
0
dx 5
1
1
66 I10 55
取
I10
1 2
1 66
t=0.01667
1 55
0.01667 利用
I n -1
1 5
1 n
- In
do i=10,1,-1
t=0.2*(1.0/i-t)
enddo write(*,*)t
结果为 I0 0.182
这个算法显然不具有数值稳定性
正确的算法在哪?
先求出I10,利用
I n -1
1 5
1 n
- In
求I
9时,
I10的误差被减小到
1 5
求I
8时,
I10的误差被减小到
1 5
2
I9
倍
1 5
1 10
-
I10
,Iபைடு நூலகம்8
1 5
1 9
-
I9
,
求I0时, I10的误差被减小到
1 5
10
倍
1 x10