数值计算方法第一章(2)2010
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
>> s=0.63212055882856; >> for n=1:20 Why? s=1-n*s; end >> s s =5642.041639996838
算法2的计算结果: 算法 的计算结果: 的计算结果
>> s=0; %或 s=-1000; 或 >> for n=40:-1:21 s=(1-s)/n; end >> s s = 0.04554488407582
9
(5) 简化计算步骤,减少运算次数 简化计算步骤, 举例7:计算矩阵 的行列式 举例 :计算矩阵A的行列式
det( A) = ( 1)τ ( i1 ,i2 ,,in ) a i1 1a i2 2 a in n ∑
i1 , i 2 ,, i n C ( 1, 2 ,, n )
次乘法, 约需要 (n-1)n! 次乘法,n=22时约为 2.36 × 10 22 时约为 每秒万亿次计算机要算75年 每秒万亿次计算机要算 年.目前最快的 超级计算机(千万亿次)也要计算27天多 天多. 超级计算机(千万亿次)也要计算 天多. 用高斯消去法, 用高斯消去法,则只要 n 3 次乘法(22 3 = 10648 次乘法( ) 快了 2 × 1018 倍.
10
�
* 1 * 1
ε ( S *) ≈|
π
2 2 * 若D1* ≈ 10.02 , D2 ≈ 4.95,则
D | ε ( D ) + |
* 1 * 1
π
* * D2 | ε ( D2 )
75.89789999 π ≈ 59.61,ε ( S *) ≈ 1.5645 S* ≈ 4 相对误差ε r ( S *) = ε ( S *) / | S * |≈ 0.0262456 ≤ 2.7%
4
举例5:教材第 页例 页例4 举例 :教材第7页例 π 2 2 S = ( D1 D2 ) = f ( D1 , D2 ) 4
0.05 ε ( D ) = 0.05cm , ε r ( D ) ≤ ≤ 0.00503 10 0.05 0.1 * * ε ( D2 ) = 0.1cm , ε r ( D2 ) ≤ ≤ 0.02041 5 0.1
ε ( y*) =| y y* |=| f ( x ) f ( x*) | =| f ' (ξ )( x x*) |≈| f ' ( x*) | ε ( x*)
1
得到误差传递公式(估计式): 得到误差传递公式(估计式): 绝对误差传递系数
ε ( y*) ≈| f ' ( x*) | ε ( x*)
相对误差传递系数
x * f ' ( x*) 亦称条件数cond 亦称条件数 ε r ( y*) ≈| | ε r ( x*) f ( x*)
举例4:计算 tg(1.57079),tg(1.57078) 举例 : ,
x = 1.57079
,
x* = 1.57078
-6
ε ( x*) =| x x* |= 0.00001 ε r ( x*) =| ( x x*) / x* |≈ 6.4 × 10
ε ( y*) =| y y* |=| f ( x1 , x2 ) f ( x1*, x2 *) |
=| f ( x1 , x2 ) f ( x1*, x2 ) + f ( x1*, x2 ) f ( x1*, x2 *) | f (ξ1 , x2 ) f ( x1*, ξ 2 ) =| ( x1 x1*) + ( x2 x2 *) | x1 x2 f (ξ1 , x2 ) f ( x1*, ξ 2 ) ≤| | ε ( x1*)+ | | ε ( x2 *) x1 x2 f ( x1*, x2 *) f ( x1*, x2 *) ≈| | ε ( x1*)+ | | ε ( x2 *) x1 x2 f x1 * f x2 * ε r ( y*) ≈| ( )* | | | ε r ( x1*)+ | ( )* | | | ε r ( x2 *) x1 y* x2 y*
§3. 误差的分析
f
输入 x 初始误差ε ( x*) ε r (x*) , 输出 y = f (x ) ε 结果误差ε ( y*), r ( y*)
y = f ( x) ,
y* = f ( x*)
ε ( y*) ?ε (x*) ,ε r ( y*) ? ε r (x*)
对于普通的函数(设一阶导数光滑) 对于普通的函数(设一阶导数光滑)有:
7
算法1的误差估计: 算法 的误差估计: 的误差估计
I n = 1 nI n 1 , ( n = 1,2,,20) ,
* * * * ε ( I n ) =| I n I n |=| (1 nI n 1 ) (1 nI n 1 ) |= n | I n 1 I n 1 | * * * = nε ( I n 1 ) = n ( n 1)ε ( I n 2 ) = = n!ε ( I 0 ) * * ∴ ε ( I 20 ) = 20!ε ( I 0 ) = ( 2.4329e + 018)(2.3315e - 015) ≈ 5600
算法2的误差估计: 算法 的误差估计: 的误差估计
I n 1 = (1 I n ) / n, ( n = 40,39,,21) , ~( I * ) =| I I * |=| (1 I ) / n (1 I * ) / n |= 1 | I I * | ε n 1 n 1 n 1 n n n n n 1~ * 1 ~( I * ) = = ( n 1)! ε ( I * ) ~ = ε ( In ) = ε n +1 N n n ( n + 1) N! ~( I * ) = 20! ε ( I * ) = ( 2.9818e - 030)(1e3) ≈ 3e - 027 ~ ∴ ε 20 40 40! 8
5
也可以直接用估计式来估计相对误差, 也可以直接用估计式来估计相对误差,根据
f x1 * f x2 * ε r ( y*) ≈| ( )* | | | ε r ( x1*)+ | ( )* | | | ε r ( x2 *) x1 y* x2 y*
应用于本例, 应用于本例,有
* 2( D1* ) 2 2( D2 ) 2 * ε r ( S *) ≈| * 2 | ε r ( D1* ) + | * 2 | ε r ( D2 ) * * ( D1 ) ( D2 ) 2 ( D1 ) ( D2 ) 2 * ≈ 2.64567 εr ( D1* ) + 0.64567 εr ( D2 ) ≈ 0.026486 ≤ 2.7%
1 | f ' ( x*) |= ≈ 3.8 × 109 2 cos ( x*)
2
ε ( y*) ≈| f ' ( x*) | ε ( x*) ≈ 3.8 × 104
1 4 ≈ 9.6 × 10 | x * f ' ( x*) / f ( x*) |= sin( x*) cos( x*) ε r ( y*) ≈ 0.6 y = tan( x ) = 1.580579134162482e + 005 y* = tan( x* ) = 6.124900853150305e + 004
(2) 相近两数避免相减
>> x=3.14159265358979; ; >> y=3.14159265358980; ; >> y-x ans = 1.021405182655144e-014
(3) 绝对值太小的数不宜作除数 (4) 警惕大数"吃掉"小数 警惕大数"吃掉"
>> x=1e16; y=1; >> x+y ans = 1.000000000000000e+016 >> vpa(x+y,20) ans = 10000000000000000.
ε ( y* ) =| y-y* |= 9.680890488474515e + 004 ε r ( y*) =| ( y-y* ) /y* |= 1.58057913435369 ε r1 ( y*) =| ( y-y* ) /y |= 0.61249008538913
3
对于二元函数
y = f ( x1 , x2 ), y* = f ( x1*, x2 *)
* 对于D1* ≈ 9.95 , D2 ≈ 5.1,则
S * ≈ 60.47 估计式估计的相对误差ε r ( S *) ≈ 0.02819 ≤ 3%
6
§4. 应注意的几个原则
(1) 算法要稳定 举例6: 举例 :
I 20 = e
1
∫
1
0
x 20e x dx
Leabharlann Baidu
算法1: 算法 :I n = 1 nI n 1 , (n = 1,2,,20) , 算法2: 算法 :I n 1 = (1 I n ) / n, (n = N , N 1,,21) 精确值: 精确值: I 20 = 0.04554488407582 算法1的计算结果: 算法 的计算结果: 的计算结果
算法2的计算结果: 算法 的计算结果: 的计算结果
>> s=0; %或 s=-1000; 或 >> for n=40:-1:21 s=(1-s)/n; end >> s s = 0.04554488407582
9
(5) 简化计算步骤,减少运算次数 简化计算步骤, 举例7:计算矩阵 的行列式 举例 :计算矩阵A的行列式
det( A) = ( 1)τ ( i1 ,i2 ,,in ) a i1 1a i2 2 a in n ∑
i1 , i 2 ,, i n C ( 1, 2 ,, n )
次乘法, 约需要 (n-1)n! 次乘法,n=22时约为 2.36 × 10 22 时约为 每秒万亿次计算机要算75年 每秒万亿次计算机要算 年.目前最快的 超级计算机(千万亿次)也要计算27天多 天多. 超级计算机(千万亿次)也要计算 天多. 用高斯消去法, 用高斯消去法,则只要 n 3 次乘法(22 3 = 10648 次乘法( ) 快了 2 × 1018 倍.
10
�
* 1 * 1
ε ( S *) ≈|
π
2 2 * 若D1* ≈ 10.02 , D2 ≈ 4.95,则
D | ε ( D ) + |
* 1 * 1
π
* * D2 | ε ( D2 )
75.89789999 π ≈ 59.61,ε ( S *) ≈ 1.5645 S* ≈ 4 相对误差ε r ( S *) = ε ( S *) / | S * |≈ 0.0262456 ≤ 2.7%
4
举例5:教材第 页例 页例4 举例 :教材第7页例 π 2 2 S = ( D1 D2 ) = f ( D1 , D2 ) 4
0.05 ε ( D ) = 0.05cm , ε r ( D ) ≤ ≤ 0.00503 10 0.05 0.1 * * ε ( D2 ) = 0.1cm , ε r ( D2 ) ≤ ≤ 0.02041 5 0.1
ε ( y*) =| y y* |=| f ( x ) f ( x*) | =| f ' (ξ )( x x*) |≈| f ' ( x*) | ε ( x*)
1
得到误差传递公式(估计式): 得到误差传递公式(估计式): 绝对误差传递系数
ε ( y*) ≈| f ' ( x*) | ε ( x*)
相对误差传递系数
x * f ' ( x*) 亦称条件数cond 亦称条件数 ε r ( y*) ≈| | ε r ( x*) f ( x*)
举例4:计算 tg(1.57079),tg(1.57078) 举例 : ,
x = 1.57079
,
x* = 1.57078
-6
ε ( x*) =| x x* |= 0.00001 ε r ( x*) =| ( x x*) / x* |≈ 6.4 × 10
ε ( y*) =| y y* |=| f ( x1 , x2 ) f ( x1*, x2 *) |
=| f ( x1 , x2 ) f ( x1*, x2 ) + f ( x1*, x2 ) f ( x1*, x2 *) | f (ξ1 , x2 ) f ( x1*, ξ 2 ) =| ( x1 x1*) + ( x2 x2 *) | x1 x2 f (ξ1 , x2 ) f ( x1*, ξ 2 ) ≤| | ε ( x1*)+ | | ε ( x2 *) x1 x2 f ( x1*, x2 *) f ( x1*, x2 *) ≈| | ε ( x1*)+ | | ε ( x2 *) x1 x2 f x1 * f x2 * ε r ( y*) ≈| ( )* | | | ε r ( x1*)+ | ( )* | | | ε r ( x2 *) x1 y* x2 y*
§3. 误差的分析
f
输入 x 初始误差ε ( x*) ε r (x*) , 输出 y = f (x ) ε 结果误差ε ( y*), r ( y*)
y = f ( x) ,
y* = f ( x*)
ε ( y*) ?ε (x*) ,ε r ( y*) ? ε r (x*)
对于普通的函数(设一阶导数光滑) 对于普通的函数(设一阶导数光滑)有:
7
算法1的误差估计: 算法 的误差估计: 的误差估计
I n = 1 nI n 1 , ( n = 1,2,,20) ,
* * * * ε ( I n ) =| I n I n |=| (1 nI n 1 ) (1 nI n 1 ) |= n | I n 1 I n 1 | * * * = nε ( I n 1 ) = n ( n 1)ε ( I n 2 ) = = n!ε ( I 0 ) * * ∴ ε ( I 20 ) = 20!ε ( I 0 ) = ( 2.4329e + 018)(2.3315e - 015) ≈ 5600
算法2的误差估计: 算法 的误差估计: 的误差估计
I n 1 = (1 I n ) / n, ( n = 40,39,,21) , ~( I * ) =| I I * |=| (1 I ) / n (1 I * ) / n |= 1 | I I * | ε n 1 n 1 n 1 n n n n n 1~ * 1 ~( I * ) = = ( n 1)! ε ( I * ) ~ = ε ( In ) = ε n +1 N n n ( n + 1) N! ~( I * ) = 20! ε ( I * ) = ( 2.9818e - 030)(1e3) ≈ 3e - 027 ~ ∴ ε 20 40 40! 8
5
也可以直接用估计式来估计相对误差, 也可以直接用估计式来估计相对误差,根据
f x1 * f x2 * ε r ( y*) ≈| ( )* | | | ε r ( x1*)+ | ( )* | | | ε r ( x2 *) x1 y* x2 y*
应用于本例, 应用于本例,有
* 2( D1* ) 2 2( D2 ) 2 * ε r ( S *) ≈| * 2 | ε r ( D1* ) + | * 2 | ε r ( D2 ) * * ( D1 ) ( D2 ) 2 ( D1 ) ( D2 ) 2 * ≈ 2.64567 εr ( D1* ) + 0.64567 εr ( D2 ) ≈ 0.026486 ≤ 2.7%
1 | f ' ( x*) |= ≈ 3.8 × 109 2 cos ( x*)
2
ε ( y*) ≈| f ' ( x*) | ε ( x*) ≈ 3.8 × 104
1 4 ≈ 9.6 × 10 | x * f ' ( x*) / f ( x*) |= sin( x*) cos( x*) ε r ( y*) ≈ 0.6 y = tan( x ) = 1.580579134162482e + 005 y* = tan( x* ) = 6.124900853150305e + 004
(2) 相近两数避免相减
>> x=3.14159265358979; ; >> y=3.14159265358980; ; >> y-x ans = 1.021405182655144e-014
(3) 绝对值太小的数不宜作除数 (4) 警惕大数"吃掉"小数 警惕大数"吃掉"
>> x=1e16; y=1; >> x+y ans = 1.000000000000000e+016 >> vpa(x+y,20) ans = 10000000000000000.
ε ( y* ) =| y-y* |= 9.680890488474515e + 004 ε r ( y*) =| ( y-y* ) /y* |= 1.58057913435369 ε r1 ( y*) =| ( y-y* ) /y |= 0.61249008538913
3
对于二元函数
y = f ( x1 , x2 ), y* = f ( x1*, x2 *)
* 对于D1* ≈ 9.95 , D2 ≈ 5.1,则
S * ≈ 60.47 估计式估计的相对误差ε r ( S *) ≈ 0.02819 ≤ 3%
6
§4. 应注意的几个原则
(1) 算法要稳定 举例6: 举例 :
I 20 = e
1
∫
1
0
x 20e x dx
Leabharlann Baidu
算法1: 算法 :I n = 1 nI n 1 , (n = 1,2,,20) , 算法2: 算法 :I n 1 = (1 I n ) / n, (n = N , N 1,,21) 精确值: 精确值: I 20 = 0.04554488407582 算法1的计算结果: 算法 的计算结果: 的计算结果