java - Java 中 sin(x) 的泰勒级数

标签 java math taylor-series

我正在尝试构建一个计算 sin(x) 泰勒级数的程序。 x 大于 0 且小于 pi/2 (我尝试用 latex 编写但没有工作(??))。 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)

最佳答案

Double 是浮点类型,这样 not accurate 。使用BigDecimal反而。请参阅this answer了解更多信息。

关于java - Java 中 sin(x) 的泰勒级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48252064/

相关文章:

java - 我的 Room 出现 "foreign key mismatch"错误的原因是什么?

javascript - 直 Angular 坐标和球坐标之间的转换

无法理解 long double 数如何大于 2^80

java - 删除 Cassandra 中的查询

java - 更改 Eclipse 插件中菜单项的属性?

建立排名/评分系统的数学模型

math - float 学有问题吗?

c - 泰勒定理 C

c++ - exp() 函数的浮点实现是否等同于截断的泰勒级数展开?

java - 如何通过 FileOutputStream 在网页内容中创建新文件