坚持用Java计算指数(泰勒系列)

时间:2016-10-03 18:02:04

标签: java taylor-series exponent

我有点难过。我正在处理一个需要你通过一系列30次迭代找到e ^ x的作业问题:1 + x + x^2/2! ... x^n/n!。在这种情况下,n = 30x的范围是-3到3.看起来很简单。然而,当试图用Java执行它时,我发现我感到困惑。

这个想法是为了循环运行两个。 x迭代的外部循环和n迭代的内部循环。这是迄今为止的代码:

double series = 1.0;

for (int x=-3; x<=3; x++)
{
    for (int n=1; n<=x+30; n++)
        {
            series = series + (x^n)/n;
            n*=n;
        } 
    System.out.println(""+ x +"\t   "+ (series+1));
}

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

您可能需要更加关注每个变量,并在循环内更改值以更好地验证您的代码。

你犯了一些错误:

  • 将n乘以其自身,然后再除以n。根据你的公式,你需要用n来驱动数字,而不是nFactorial。此外,nFactorial是一个需要存储的大数(并获得准确的结果),更好地利用除以n的优势,并在每一步乘以x(见下面的代码)。
  • 您还使用了XOR运算符。而是使用Math.pow()方法。
  • 您需要在每个内循环开始时初始化系列值。
  • 如果您从初始值1开始,则不需要在结尾打印(系列+ 1)。最好将其初始化为0,或者在打印中删除+1。

以下代码可以更好地解决您的目的。

    double series = 1.0;
    double term = 1.0;

    for (int x = -3; x <= 3; x++) {
        series = 1.0;
        term = 1.0;
        for (int n = 1; n <= 30; n++) {
            term = (term * x / n);
            series += term;
        }
        System.out.println("" + x + "\t   " + (series));

    }

答案 1 :(得分:0)

你可以用这样的MATH.POW编写你的公式:

    for (int x=-3; x<=3; x++)
    {
        for (int n=1; n<=x+30; n++)
            {
                series = series + (Math.pow(x,n)/n);
                n*=n;
            } 
        System.out.println(""+ x +"\t   "+ (series+1));
    }