如何解java中的正弦方程?

How to solve sine mathematic equation in java?

如何解java中的以下数学方程式?

等式: x + sin(x) = constant,其中 x 是可变的。 18年后我遇到了这个方程式。我忘记了这个基本概念。请帮助我解决这个基本的高中问题。

我尝试将上面的等式 x + sin(x) = constant 编码如下,但是,它给出了错误的答案。请让我知道我哪里错了。

    public double balanceLength(double total_weight) {
        // 5.00 assume inical value of x
        return newtonRaphson( 5.00,  total_weight);
    }
    private static double derivFunc(double x)
    {
        return sin(x) + x;
    }
    private static double func(double x, double weight)
    {
        return sin(x) + x - weight;
    }
    static double newtonRaphson(double x, double weight)
    {

        double h = func(x, weight) / derivFunc(x);
        while (abs(h) >= EPSILON)
        {
            h = func(x, weight) / derivFunc(x);
            x = x - h;
        }

        return round(x * 100.0) / 100.0 ;
    }

这是一个非常基本的实现,仅进行了部分测试。它以弧度重新运行 x,对于给定的 y 满足 y=six(x) +x

//returned value in radians
static double evaluateSinxPlusx(double y){

    double delta = y>0 ?  0.01 : -0.01 ;//change constants
    double epsilon = 0.01;            //to change
    int iterations = 100;             //accuracy

    double x = 0;
    double sum = 1;

    while(Math.abs(y - sum) > epsilon) {
        x+=delta;
        //based Taylor series approximation
        double term = 1.0;
        sum  = x;
        double d = 1;
        for (int i = 1; i< iterations; i++) {
             term = Math.pow(x, i);
             d*=i;
             if (i % 4 == 1) {

                sum += term/d;
            }
             if (i % 4 == 3) {
                sum -= term/d;
            }
         }
    }
    return x;
}

//test it 
public static void main(String[] args) throws Exception{

    double y = 0.979;
    //expected x = 0.5 radians
    System.out.println("for x="+ evaluateSinxPlusx(y)+"(radians), sin(x)+x = "+ y);

    y = -0.979;
    //expected x = - 0.5 radians
    System.out.println("for x="+ evaluateSinxPlusx(y)+"(radians), sin(x)+x = "+ y);

    y = 0.33256;
    //expected x = 0.16666 radians
    System.out.println("for x="+ evaluateSinxPlusx(y)+"(radians), sin(x)+x = "+ y);
}

这不是一个可靠的实现,只能用作演示。