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

  • 相关阅读:
    Neko's loop HDU-6444(网络赛1007)
    Parameters
    SETLOCAL
    RD / RMDIR Command
    devenv 命令用法
    Cannot determine the location of the VS Common Tools folder.
    'DEVENV' is not recognized as an internal or external command,
    How to change Visual Studio default environment setting
    error signing assembly unknown error
    What is the Xcopy Command?:
  • 原文地址:https://www.cnblogs.com/Sdchr/p/14658423.html
Copyright © 2011-2022 走看看