如何在Java中实现arctan函数?

vktxenjb  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(364)

要实现的函数

代码

public class arctan {
    public static double arctan(double x) {
        double sum = 0;
        int k = 0;

        double arctan1 = (Math.pow(-1, k) * (Math.pow(x, 2 * k + 1) / (2 * k + 1)));
        for (int i = k; i < 100; i++) {
            sum =+ arctan1;
        }
        return (double) arctan1;
    }
}

问题

我的程序只是返回了我的x作为输出。我没有看到我所做的错误。

elcex8rz

elcex8rz1#

你必须把double arctan1 = (Math.pow(-1, k) * (Math.pow(x, 2 * k + 1) / (2 * k + 1)));也放进循环中,因为这是Σ在公式中的作用。
在这种情况下,你也不需要在for循环中有一个新的变量i,像公式那样使用k就可以了。
所以它应该是这样的:

public class arctan {
    public static double arctan(double x) {
        double sum = 0;

        for (int k = 0; k < 100; i++) {
            sum += (Math.pow(-1, k) * (Math.pow(x, 2 * k + 1) / (2 * k + 1)));
        }
        return sum;
    }
}
qvk1mo1f

qvk1mo1f2#

字母Σ(求和)是什么意思?

参见Wikipedia关于数学求和符号(希腊字母中大写的sigma):Σ.
在您的情况下,它是从k = 0k = infinite范围内的总和。
sigma * 后面的 * 项之和。

将其定义为函数而不是变量

  • 后面的 * 术语通过以下方式正确实施:double arctan1 = (Math.pow(-1, k) * (Math.pow(x, 2 * k + 1) / (2 * k + 1)));

将其提取为kx的函数:

public static double arctan1(int k, double x) {
    return ( Math.pow(-1, k) * (Math.pow(x, 2 * k + 1) / (2 * k + 1) ));
}

因为现在计算依赖于输入kx,所以可以在k的求和范围中使用它:

// Note: the limit is 99 here, not infinite
for (int k = 0; k < 100; k++) {
  sum += arctan1( k,x );  // increasing k used as input
}

把它放在一起

// your "term following the sum-over" implemented by function arctan1(int k, double x)
 
public static double arctan(double x) {
    double sum = 0;
    // your loop to sum-up for increasing k
    return sum;
}

相关问题