2015-03-06 4 views
2

Я делаю программу, чтобы применить метод Ньютона-Рафсона в Java с уравнением:

ф (х) = 3x - е^х + sin (х)

И

г (х) = Р '(х) = 3- е^х + соз (х)Ньютона-Рафсона метод в Java

проблема заключается в том, когда я пытался решить уравнение в работе, чтобы достигнуть ошибки меньше, чем (0,5 %)
Я получил:

          Xn                                             |               Ошибка

        Хо = 2                                         |       ------------------------

  X1 = 1,900158400                     |                       5,254%

  X2 = 1,89012709                         |                         0,5307%

Но когда я сделал программу в Java не доходит до последней строки, которая является требуемая погрешность
(Ex: 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% 
+0

Я не вижу места в коде, где вы вычислить, или дисплей x2 – azurefrog

+0

@azurefrog Я уже сделал то время цикла, поэтому он должен вычислить автоматически –

+0

Вы сказали, что в вашем вопросе вы ищете " (Пример: X2 = 1.89012709) ". В вашем коде под названием x2 нет ничего. Вы не рассчитываете и не пытаетесь отобразить что-либо после «Ошибка: », которая является результатом, который вы получаете. Каков ваш * ожидаемый выход? – azurefrog

ответ

0

Причина, по которой ваш код никогда не «попадает в последнюю строку», предположительно вы ссылаетесь к оператору return в вашем методе NewtonRhapson(), заключается в том, что он находится в бесконечном цикле. Каждая итерация цикла идентична последней. Вы устанавливаете x0 вне цикла, а затем никогда не устанавливаете его снова. Учитывая, что остальные значения/вычисления в вашем цикле получены из x0, вы получаете одинаковые результаты снова и снова.

-1
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(); 

    } 
} 
+0

добавьте комментарии к вашему ответу. это будет полезно для других людей. – HDJEMAI

+0

ошибка = 5000 не требуется, добавить еще x0 = x1 –

+0

Программа сделала это в 101 шаге Корень: 1.8900297292519856 Ошибка: 0.0% –