我正在尝试建立一个程序来计算sin(x)的泰勒级数。当x大于0且小于pi / 2时(我试图用乳胶来写,但是没有用(??))。 sin(x)的近似值在点x0 = 0周围。e是最大误差(或不准确……我不知道它怎么称呼)。错误(或不准确性)是使用我称为r的方法中的公式计算得出的。因此,r必须始终小于e。最后,n是迭代次数。下面是我的程序,它没有错误,但是我得到的结果不准确,我也不知道我在做什么错(也许我们应该考虑使用带有错误公式的可能性)。

import java.lang.Math;
import java.util.Scanner;

public class hw74 {
    public static long factorial(int number) {
        long result = 1;

        for (int factor = 2; factor <= number; factor++) {
            result *= factor;
        }

        return result;
    }

    static double p(double x, double x0, int n) {
        double PT = Math.pow(-1, n) * (Math.pow(x-x0, 2*n+1)/factorial(2*n+1));
        return PT;
    }

    static double r(double x, int n) {
        double rn = Math.pow(x, n+1)/factorial(n+1);
        return Math.abs(rn);
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        double x0 = 0;
        System.out.println("Give x. ");
        double x = sc.nextDouble();
        System.out.println("Give E. ");
        double e = sc.nextDouble();
        System.out.println("Give N. ");
        int n = sc.nextInt();
        int i = 0;
        //System.out.println(e<r(x, i) && i<n);
        //System.out.println(r(x, i));
        while((r(x, i)<e) && i<n) {
            i++;
            System.out.println("N is : "+i);
            System.out.println("P is : "+p(x,x0,n));
            System.out.println("E is : "+r(x,n));
        }
    }
}


例如:对于n = 5,e = 1和x = pi / 5(0.62831853071),结果应为:sin(pi / 5)= 0.5877852522 ...对于n = 1 r = 0.1974,n = 2 r = 0.0413,n = 3 r = 0.0065,n = 4 r = 8.16 * 10 ^(-4),n = 5 r = 8.54 * 10 ^(-5)

最佳答案

我们用泰勒多项式近似泰勒级数(总和)。程序中的方法p仅计算该多项式中的一个项,因此您只需要将0到N的序列求和即可,例如:

static double sum(double x, double x0, int n) {
    double sum = 0;
    for (int i = 0; i <= n; ++i) {
        sum += p(x, x0, i);
    }
    return sum;
}


换句话说,就是用符号∑表示的部分。

编辑:查看您在main中的逻辑,可能是您已经在尝试执行类似的操作,但是我不确定。我认为您可能也需要重新考虑一下。

10-06 14:29