具体的近似精度有多少和项?

时间:2016-09-09 16:33:49

标签: c# algorithm

找到 N 以便连续两个值:

enter image description here

小于10 ^ { - 4}。

换句话说,我们需要多少个术语才能将上述系列近似到给定的数字。

下面是代码,其中我减去两个连续的和值,并将结果与​​所需的精度进行比较,作为精度测试:

using System;

namespace ProgrammingBasics 
{
    class ApproximationAccuracy
    {
        static void Main()
        {
            double eps = 10e-4;
            Console.WriteLine("Precision: {0}, Needed terms: {1}",
                              eps, numberOfTermsForGivenPrecision(eps));
        }
        //------------------------------------------------------------------ 

        static long numberOfTermsForGivenPrecision(double epsilon)
        {
            double lastSum = 0, currentSum = 0;
            long term = 0, iterations = 0;
            while (true)
            {
                // \sum \frac{1}{e^n}
                currentSum += (1.0 / Math.Pow(Math.E, term++));

                if (Math.Abs(currentSum - lastSum) < epsilon)
                {
                    break;
                }
                lastSum = currentSum;
                ++iterations;
            }
            return iterations;
        }
    }
}

输出:

  

精确度:0.001,需要的术语:7

在我看来,这些术语对于那种准确性来说太少了,上面的代码和逻辑是对的吗?

2 个答案:

答案 0 :(得分:1)

快捷方式:

e -n &lt; 10 -4
-n&lt; LN(10 -4
-n&lt; -4 * ln(10)
n> 4 * ln(10)〜= 9.21
n = 10
对于0.001 = 10 -3 :n = 7

答案 1 :(得分:1)

假设部分和的差值小于下一个的差值小于x并不一定要说部分和的差值比系列的和小于x。仍有无数的术语将两者分开。

您需要做的就是计算一个小于x的项,生成该项的n将是您的答案,因为这将是两个连续的部分和之间的差异。

在你的情况下,

1 /(e ^ n)&lt; 1 /(10 ^ 4)

e ^ n&gt; 10 ^ 4

n&gt; LN(10 ^ 4)= 9.2103 ...

并且满足这个的最小n将是你的n(10)。

关于你的代码 - 从输出中我们可以看到存在问题,因为1 /(e ^ 7)= 0.0009&gt; 0.0001 = 1 /(10 ^ 4)。 我们也可以看到问题出在哪里,虽然你要求输入10 ^( - 4):0.001 = 10 ^( - 3)。这与eps的定义有关。