泰勒系列的正弦波

时间:2017-06-28 22:38:57

标签: java taylor-series

我目前正在大学的Java课程中,我们被要求编写一个泰勒级数方程来计算正弦函数。我编写了对我有意义的代码,并且我已经尝试调试我能想到的每一段代码,以确保所有部分都按我认为应该的方式运行,但程序仍然无法正常运行。所以,我希望有人可以看看这个并发现我做错了什么。

这是等式:Taylor Series Equation

public class Sine {

public static int factorial(int a) {
    int num = a;
    if (a == 1) return 1;
    for (int i = 1; i < num; i++){
    a = a * i;
    }   return a;
}
public static double numerator(double x, int power) {
    double ret = Math.pow(x, power);
    return ret;
    }
public static void main(String[] args) {
    int power = 1;
    int iter = 0;
    double x = Math.PI/4;

    int sign = 1;
    while (iter != 10) {
        iter++;
        System.out.println("Iteration " + iter + ": " + x);
        x += sign * numerator(x, power)/factorial(power);
        power += 2;
        sign *= -1;
    }
    System.out.println("\nTaylor Series, Final: " + x);
System.out.println("Value of Sine: " + Math.sin(Math.PI/4));
}
}

我很困惑发生了什么以及它为什么不起作用。

1 个答案:

答案 0 :(得分:0)

你做错了什么(感谢@AndyTurner)试图将大型因子存储在int中,这当然只能存储大约20亿的数据。

为避免必须处理大数字及其有限的精度,您可以使用以下原则,适用于泰勒系列的正弦。

  

x n中的术语 =(x n-2 中的术语)* - x * x / n / (n-1)

例如,如果你已经计算了x 5 / 5 !,那么计算-x 7 / 7的最佳方法就是!是将你已经计算过的数字乘以-x 2 / 6/7。

如果你以这种方式计算你的条款,然后将它们加起来,你就可以避免处理大数字时遇到的所有问题。