• 6-1 Numerical Summation of a Series


    题意

    [phi(x) = sum_{k = 1} ^ {infty} frac{1}{k(k + x)} ]

    (phi(0.0), phi(0.1), ..., phi(300.0)),保证绝对误差不超过 ({10} ^ {-10}),时间限制 100 ms.

    分析

    一种简单暴力的想法是设置一个阈值 (T):对 (k le T),直接暴力累加;对 (k > T),直接估计。然而,在指定的时间内,不管如何设置 (T),精度都远远不够。

    考虑对 (phi(x)) 做一些转化,使得转化后的对象 (mu(x)) 收敛得更快,对转化后的对象 (mu(x)) 用相同的方法计算,然后再根据 (phi(x))(mu(x)) 的关系,计算得到 (phi(x))

    注意到

    [phi(1) = sum_{k = 1} ^ {infty} frac{1}{k(k + 1)} = 1 ]

    (phi(x)) 作转化:令 (phi(x)) 减去 (phi(1)),得

    [phi(x) - phi(1) = (1 - x)sum_{k = 1} ^ {infty} frac{1}{k(k + 1)(k + x)} = (1 - x) mu(x) ]

    然而这样还是过不了。

    正解的做法应该是对 (mu(x)) 继续进行变换,然而我又变换了三四次,依然无法满足题意要求,误差还越来越大(我猜测这是因为对转化量的的要求越来越高)。

    只能去考虑对于不同的 (x)(phi(x)) 之间存在什么联系。

    先对 (phi(x)) 进行裂项转化:

    [phi(x) = sum_{k = 1} ^ {infty} frac{1}{k(k + x)} = frac{1}{x} sum_{k = 1} ^ {infty} (frac{1}{k} - frac{1}{k + x}) ]

    [phi(x + 1) = sum_{k = 1} ^ {infty} frac{1}{k(k + x + 1)} = frac{1}{x + 1} sum_{k = 1} ^ {infty} (frac{1}{k} - frac{1}{k + x + 1}) ]

    那么有

    [xphi(x) = (x + 1)phi(x + 1) - frac{1}{1 + x} ]

    观察得知 (phi) 越小,我们的方法计算精度越高。于是我们可以设置更大的阈值 (T),更精确地计算 (phi(0.0, 0.1, 0.2, ..., 0.9)),然后根据上面的等式关系,推出所有的解。

  • 相关阅读:
    [转]Delphi DLL的创建、静态 以及动态调用
    Delphi txt文件的操作(读取、写入)
    为什么要使用动态链接库(DLL)
    TStringGrid 实现下拉框
    Ryzen 4000'Vermeer' CPU和Radeon RX'Big Navi'图形卡
    AMD Ryzen 5000‘Cezanne’APU
    AMD–7nm “Rome”芯片SOC体系结构,支持64核
    ARM Cortex-M嵌入式C基础编程(下)
    ARM Cortex-M嵌入式C基础编程(上)
    基于ARM Cortex-M的SoC存储体系结构和实战
  • 原文地址:https://www.cnblogs.com/Sdchr/p/14658423.html
Copyright © 2020-2023  润新知