• 计算机程序设计艺术习题解答(Excercise 1.2.2-27题)- 求对数标准算法的有限精度误差估计


    27. [M25] 此题需要结合正文中计算 log10xlog10x 的标准算法。 用 xkxk 表示 xkxk 基于有限精度的近似值: x(1σ)10nx0x(1+ϵ)x(1σ)10nx0x(1+ϵ) ,用 ykyk 替代公式(18)中的 (xk1)2(xk1)2,即 (xk1)2(1σ)yk(xk1)2(1+ϵ)(xk1)2(1σ)yk(xk1)2(1+ϵ) 并且 1yk<1001yk<100 ,这里的  σσ 和 ϵϵ 是很小的大于零的常数,表示基于有限精度的近似值的误差上界和下界。若用 log10xlog10x 表示计算结果,试证明 k 步之后有 log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ)log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ) 。

    证明:

    在此回顾一下正文中计算 log10xlog10x 的标准算法。

    log10xlog10x 用二进制表示为 log10x=n.b1b2b3...=n+b1/2+b2/4+b3/8+...log10x=n.b1b2b3...=n+b1/2+b2/4+b3/8+...           (17)

    假设 x1x1 ,若 x < 1, 则首先计算 log101/xlog101/x

    x 的整数部分 n 满足 1x/10n<101x/10n<10 。为得到 b1,b2,...b1,b2,... 的值,我们设 x0=x/10nx0=x/10n ,对所有的 k1k1 ,

    若 x2k1<10x2k1<10 ,则 bk=0,xk=x2k1bk=0,xk=x2k1 ;

    x2k110x2k110 ,则 bk=1,xk=x2k1/10bk=1,xk=x2k1/10                                                                        (18)

    这个过程的有效性来自如下事实:

    对 k = 0, 1, 2, ...,有 1xk=x2k/102k(n+b1/2+...+bk/2k)<101xk=x2k/102k(n+b1/2+...+bk/2k)<10 ,                                     (19)

    这个事实可以用归纳法证明:当 k = 0 时,显然有 1x0=x/10n<101x0=x/10n<10 ,

    k1k1 时,若 xk1xk1 满足条件 1xk1=x2k1/102k1(n+b1/2+...+bk1/2k1)<101xk1=x2k1/102k1(n+b1/2+...+bk1/2k1)<10 ,

    此时 x2k1=x2k/102k(n+b1/2+...+bk1/2k1)x2k1=x2k/102k(n+b1/2+...+bk1/2k1) 满足 1x2k1<1001x2k1<100 ,

    当 1x2k1<101x2k1<10 时,令 bk=0bk=0 ,则 xk=x2k/102k(n+b1/2+...+bk1/2k1+0/2k)=x2k1xk=x2k/102k(n+b1/2+...+bk1/2k1+0/2k)=x2k1 ,满足 1xk<101xk<10 ;

    当 10x2k1<10010x2k1<100 时,令 bk=1bk=1,则 xk=x2k/102k(n+b1/2+...+bk1/2k1+1/2k)=x2k/102k(n+b1/2+...bk1/2k1)+1=x2k1/10xk=x2k/102k(n+b1/2+...+bk1/2k1+1/2k)=x2k/102k(n+b1/2+...bk1/2k1)+1=x2k1/10 ,仍然满足 1xk<101xk<10 。归纳证明完毕。

    回到这道习题,我们有 log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ)log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ) log10x(1σ)2/101/2k<log10xlog10x(1+ϵ)2log10x(1σ)2/101/2k<log10xlog10x(1+ϵ)2 x(1σ)2/101/2k<xx(1+ϵ)2x(1σ)2/101/2k<xx(1+ϵ)2  x2k(1σ)2k+1/10<(x)2kx2k(1+ϵ)2k+1x2k(1σ)2k+1/10<(x)2kx2k(1+ϵ)2k+1  

    由于 σ,ϵσ,ϵ 都是大于零的很小的常数,可以在这里假定 0<1σ<1,1<1+ϵ<20<1σ<1,1<1+ϵ<2 , 则 x2k(1σ)2k+1/10<x2k(1σ)2k+1/(1σ)=x2k(1σ)2k+11x2k(1σ)2k+1/10<x2k(1σ)2k+1/(1σ)=x2k(1σ)2k+11 ,而 x2k(1+ϵ)2k+1>x2k(1+ϵ)2k+1/(1+ϵ)=x2k(1+ϵ)2k+11x2k(1+ϵ)2k+1>x2k(1+ϵ)2k+1/(1+ϵ)=x2k(1+ϵ)2k+11 ,因此要证明以上的不等式成立,只需证明比它们更加严格的不等式 x2k(1σ)2k+11(x)2kx2k(1+ϵ)2k+11x2k(1σ)2k+11(x)2kx2k(1+ϵ)2k+11 即可。

    类似于公式(19),我们有 1xk=(x)2k/102k(n+b1/2+...+bk/2k)<101xk=(x)2k/102k(n+b1/2+...+bk/2k)<10 ,即 (x)2k=102k(n+b1/2+...+bk/2k)xk(x)2k=102k(n+b1/2+...+bk/2k)xk ,代入上面的式子就得到要证明的不等式为 x2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11x2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11​​​​​​​

    继续用归纳法。当 k=0k=0 时,根据题面显然有 x(1σ)10nx0x(1+ϵ)x(1σ)10nx0x(1+ϵ) ,

    k1k1 时,若 xk1xk1 满足 x2k1(1σ)2k1102k1(n+b1/2+...+bk1/2k1)xk1x2k1(1+ϵ)2k1x2k1(1σ)2k1102k1(n+b1/2+...+bk1/2k1)xk1x2k1(1+ϵ)2k1 ,对上式各个部分分别取平方,得到 x2k(1σ)2k+12102k(n+b1/2+...+bk1/2k1)(xk1)2x2k(1+ϵ)2k+12x2k(1σ)2k+12102k(n+b1/2+...+bk1/2k1)(xk1)2x2k(1+ϵ)2k+12

    先看左边的不等式 x2k(1σ)2k+12102k(n+b1/2+...+bk1/2k1)(xk1)2x2k(1σ)2k+12102k(n+b1/2+...+bk1/2k1)(xk1)2 ,两边同时乘以 (1σ)(1σ) ,且根据题面有 (xk1)2(1σ)yk(xk1)2(1σ)yk ,x2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1)(xk1)2(1σ)102k(n+b1/2+...+bk1/2k1)ykx2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1)(xk1)2(1σ)102k(n+b1/2+...+bk1/2k1)yk

    由于 1yk<1001yk<100 ,当 yk<10yk<10 时,令 bk=0,xk=ykbk=0,xk=yk ,可得 x2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1+0/2k)yk=102k(n+b1/2+...+bk1/2k1+bk/2k)xkx2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1+0/2k)yk=102k(n+b1/2+...+bk1/2k1+bk/2k)xk ;当 10yk<10010yk<100 时,令 bk=1,xk=yk/10bk=1,xk=yk/10 ,即 yk=10xkyk=10xk ,可得 x2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1)yk=102k(n+b1/2+...+bk1/2k1+1/2k)xk=102k(n+b1/2+...+bk1/2k1+bk/2k)xkx2k(1σ)2k+11102k(n+b1/2+...+bk1/2k1)yk=102k(n+b1/2+...+bk1/2k1+1/2k)xk=102k(n+b1/2+...+bk1/2k1+bk/2k)xk

    。综合起来,可得 x2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xk 。

    再看右边的不等式 102k(n+b1/2+...+bk1/2k1)(xk1)2x2k(1+ϵ)2k+12102k(n+b1/2+...+bk1/2k1)(xk1)2x2k(1+ϵ)2k+12 ,两边同时乘以 (1+ϵ)(1+ϵ)

    且根据题面有 yk(xk1)2(1+ϵ)yk(xk1)2(1+ϵ) ,可以推得102k(n+b1/2+...+bk1/2k1)yk102k(n+b1/2+...+bk1/2k1)(xk1)2(1+ϵ)x2k(1+ϵ)2k+11102k(n+b1/2+...+bk1/2k1)yk102k(n+b1/2+...+bk1/2k1)(xk1)2(1+ϵ)x2k(1+ϵ)2k+11

    和上面的推导类似,可得 102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11 。结合起来,就得到了要证明的不等式 x2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11x2k(1σ)2k+11102k(n+b1/2+...+bk/2k)xkx2k(1+ϵ)2k+11

     。 反推回去,就证明了 log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ)log10x+2log10(1σ)1/2k<log10xlog10x+2log10(1+ϵ) 。这个式子也说明,随着 k 的增大,log10xlog10x 越来越接近于 log10xlog10x​​​​​​​ 。

  • 相关阅读:
    搭建Android自动化python+appium环境
    Git 常用
    Verilog 表达式
    (十五)admin-boot项目之使用undertow来替代tomcat容器
    JS每晚24:00更新某方法
    动态规划:2304. 网格中的最小路径代价
    HTML5期末考核大作业,网站——青岛民俗 7页。 美丽家乡 学生旅行 游玩 主题住宿网页
    【LSTM-Attention】基于长短期记忆网络融合注意力机制的多变量时间序列预测研究(Matlab代码实现)
    中秋时节赏明月,五子棋戏月饼趣 — Flutter中秋限定版五子棋
    pandas常用数据操作记录
  • 原文地址:https://blog.csdn.net/u012439764/article/details/126403555