【问题标题】:Newton-Raphson Method in JavaJava 中的 Newton-Raphson 方法
【发布时间】:2015-05-08 11:21:50
【问题描述】:

我正在编写一个程序以在 Java 中应用 Newton-Raphson 方法,其中包含一个方程:

f(x) = 3x - e^x + sin(x)



g(x) = f'(x) = 3- e^x + cos (x)

问题是当我试图解决论文中的方程以达到小于 (0.5%) 的误差
我得到了:

       Xn                          |错误

Xo = 2                      | ----------------------

X1 = 1.900158400          | 5.254%

X2 = 1.89012709            | 0.5307%

但是当我用 Java 编写程序时,它没有到达最后一行,这是必需的错误
(例如:X2 = 1.89012709)
它只显示第一行,即第一步
(X1 = 1.900158400)

我的 Java 代码是:

package newton.raphson.method;

public class NewtonRaphsonMethod {


          // let f be a function defined as f(x) = 3x - e^x + sin(x)

        public static double f (double x){

            return (3*x-(Math.pow(Math.E, x))+Math.sin(x));
        }

        // let g be a function defined as g(x) = f'(x) = 3- e^x + cos (x)


     public static double g (double x){

            return (3-(Math.pow(Math.E, x))+Math.cos(x));
        }


          public static double NewtonRaphson (){
              int iterations_number=0;
              boolean cont = true;
            double x0 , x1, Error=5000;
            x0 =2;
            x1=0;

            while (cont){
            x1 = x0 - (f(x0)/g(x0));
            Error = (Math.abs(x1-x0)/x1)*100;
            iterations_number++;
            if (f(x1)<=0.05){
            cont = false;
            System.out.println("The Program did it in "+iterations_number+" Step(s)");
            System.out.println("The root is: "+ x1);
             System.out.println("The Error is: "+(Math.abs(x1-x0)/x1)*100+"%");
            }
            }

            return x1;
        }

    public static void main(String[] args) {
         NewtonRaphson();

    }
}


输出是:

The Program did it in 1 Step(s)
The root is: 1.9001584993293807
The Error is: 5.254377500921955%

【问题讨论】:

  • 我在您的代码中没有看到您计算或显示 x2 的任何地方
  • @azurefrog 我已经做了一个while循环,所以它应该自动计算它
  • 您在问题中说您正在寻找“(例如:X2 = 1.89012709)”。您的代码中没有任何内容称为 x2。在“The Error is: ”之后,您既不计算也不尝试显示任何内容,这是您得到的输出。您的预期输出是什么?
  • 我希望while循环在误差小于0.5%时结束
  • 那么你应该让你的while循环依赖于小于0.5%的错误。目前您在f(x1) &lt;= 0.05 时终止,而不是在您的错误小于 0.05 时终止。

标签: java netbeans newtons-method


【解决方案1】:

您的代码永远不会“到达最后一行”的原因可能是您指的是 NewtonRhapson() 方法中的 return 语句,因为它处于无限循环中。循环的每次迭代都与上一次相同。您在循环之外设置 x0,然后再也不设置它。鉴于循环中的其余值/计算都是从 x0 派生的,您会一遍又一遍地得到相同的结果。

【讨论】:

    【解决方案2】:
    public class NewtonRaphsonMethod {
    
    
              // let f be a function defined as f(x) = 3x - e^x + sin(x)
    
            public static double f (double x){
    
               // return (3*x-(Math.pow(Math.E, x))+Math.sin(x));
                return((Math.pow(x, 2))+5*x+6);
            }
    
            // let g be a function defined as g(x) = f'(x) = 3- e^x + cos (x)
    
    
         public static double g (double x){
    
               // return (3-(Math.pow(Math.E, x))+Math.cos(x));
             return(2*x+5);
            }
    
    
              public static double NewtonRaphson (){
                  int iterations_number=0;
                  boolean cont = true;
                double x0 , x1, Error=0;
                x0 =-1.8;
                x1=0;
    
                while (cont){
    
                x1 = x0 - (f(x0)/g(x0));
                Error = Math.abs(x1-x0);
                iterations_number++;
               // if (Error<=0.0000000005){
                if(iterations_number>100){
                cont = false;
                System.out.println("The Program did it in "+iterations_number+" Step(s)");
                System.out.println("The root is: "+ x1);
                 System.out.println("The Error is: "+(Math.abs(x1-x0)/x1)*100+"%");
                }else{
                    x0=x1;
                }
                }
    
                return x1;
            }
    
        public static void main(String[] args) {
             NewtonRaphson();
    
        }
    }
    

    【讨论】:

    • 在您的答案中添加一些 cmets。这对其他人会有所帮助。
    • 程序在 101 步中完成了根是:1.8900297292519856 错误是:0.0%
    • 对于 f(x) = 3x - e^x + sin(x)
    猜你喜欢
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多