算法的数值稳定性

发布于:2024-10-16 ⋅ 阅读:(137) ⋅ 点赞:(0)

内容来源
数值分析第五版 清华大学出版社


定义

一个算法如果输入数据有误差,而在计算过程中舍入误差不增长,则称此算法是数值稳定的,否则是不稳定的

(感觉应该是初始误差限不增长)


计算 I n = e − 1 ∫ 0 1 x n e x d x ( n = 0 , 1 , ⋯   ) I_n=e^{-1}\int^1_0x^ne^x\mathrm{d}x(n=0,1,\cdots) In=e101xnexdx(n=0,1,) 并估计误差

由分部积分得

{ I n = 1 − n I n − 1 , n > 0 I 0 = 1 − e − 1 \begin{cases} I_n=1-nI_{n-1},n>0\\ I_0=1-e^{-1} \end{cases} {In=1nIn1,n>0I0=1e1

用泰勒多项式展开部分和估计 e − 1 e^{-1} e1

e − 1 ≈ 1 + ( − 1 ) + ( − 1 ) 2 2 ! + ⋯ + ( − 1 ) k k ! e^{-1}\approx1+(-1)+\frac{(-1)^2}{2!}+\cdots+\frac{(-1)^k}{k!} e11+(1)+2!(1)2++k!(1)k

k = 7 k=7 k=7 ,用 4 4 4 位小数计算, I 0 ≈ 0.6321 = I ~ 0 I_0\approx0.6321=\tilde{I}_0 I00.6321=I~0 ,用上面的递推公式计算结果如下

n I ~ n \tilde{I}_n I~n n I ~ n \tilde{I}_n I~n
0 0.6321 5 0.1480
1 0.3679 6 0.1120
2 0.2642 7 0.2160
3 0.2074 8 -0.7280
4 0.1704 9 7.552

表中 I ~ 8 \tilde{I}_8 I~8 为负值,与 I n > 0 I_n>0 In>0 相矛盾

这里计算公式与每步计算都是正确的,正是误差在计算过程中被逐步放大才导致错误的计算结果

设初始误差为 E 0 E_0 E0 根据递推公式得

E n = − n E n − 1 , n > 0 E_n=-nE_{n-1},n>0 En=nEn1,n>0

所以

E n = ( − 1 ) n n ! E 0 E_n=(-1)^nn!E_0 En=(1)nn!E0

这表明这种计算方法是数值不稳定的

换一种计算方案

由积分估值得(注意到

e − 1 n + 1 = e − 1 ( min ⁡ 0 ⩽ x ⩽ 1 e x ) ∫ 0 1 x n d x < I n < e − 1 ( max ⁡ 0 ⩽ x ⩽ 1 e x ) ∫ 0 1 x n d x = 1 n + 1 \frac{e^{-1}}{n+1}=e^{-1}(\min_{0\leqslant x\leqslant1}e^x) \int^1_0x^n\mathrm{d}x<I_n< e^{-1}(\max_{0\leqslant x\leqslant1}e^x) \int^1_0x^n\mathrm{d}x=\frac{1}{n+1} n+1e1=e1(0x1minex)01xndx<In<e1(0x1maxex)01xndx=n+11

n = 9 n=9 n=9

e − 1 10 < I 9 < 1 10 \frac{e^{-1}}{10}<I_9<\frac{1}{10} 10e1<I9<101

1 2 ( e − 1 10 + 1 10 ) ≈ 0.0684 = I 9 ~ \frac{1}{2}\left(\frac{e^{-1}}{10}+\frac{1}{10}\right)\approx0.0684=\tilde{I_9} 21(10e1+101)0.0684=I9~ ,再将递推公式倒过来

{ I ~ n − 1 = 1 n ( 1 − I ~ n ) , n < 9 I ~ 9 = 0.0684 \begin{cases} \tilde{I}_{n-1}=\frac{1}{n}(1-\tilde{I}_{n}),n<9\\ \tilde{I}_9=0.0684 \end{cases} {I~n1=n1(1I~n),n<9I~9=0.0684

n I ~ n \tilde{I}_n I~n n I ~ n \tilde{I}_n I~n
0 0.6321 5 0.1455
1 0.3679 6 0.1268
2 0.2643 7 0.1121
3 0.2073 8 0.1035
4 0.1708 9 0.0684

I ~ 0 \tilde{I}_0 I~0 I 0 I_0 I0 的误差已经小于 1 0 − 4 10^{-4} 104

在这种计算方案中,误差是逐步缩小的,因而是数值稳定的

E n − 1 = − 1 n E n E_{n-1}=-\frac{1}{n}E_n En1=n1En


网站公告

今日签到

点亮在社区的每一天
去签到