• 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)),然后根据上面的等式关系,推出所有的解。

  • 相关阅读:
    springBoot启动异常 Failed to load ApplicationContext
    mysql存储过程
    springBoot集成Swagger
    groupmems命令:更改和查看组成员 和 usermod命令修改组
    javaBean简介
    Angular获取dom元素,以及父子组建之间相互传值
    Lambda表达式
    坐标转换
    扩展方法
    Binding的Path(路径)
  • 原文地址:https://www.cnblogs.com/Sdchr/p/14658423.html
Copyright © 2020-2023  润新知