牛顿的Raphsons方法Java

时间:2017-04-19 15:16:55

标签: java arrays math newtons-method

我想将我的数据列表为牛顿Raphsons方法仅用于整齐数组中的二次方程式。我遇到的困难是在数组中分配变量,将xn1的先前值分配给后续行中的xn值,并在数组中具有double值。

例如(在下面的代码中)我有变量,如(n,xn,fxn,dfxn,xn1)。我想在相应的标题下分配这些变量的值,如下图所示。

enter image description here

在[image]中,第一行中的xn + 1值成为第二行中的xn值。我无法做到这一点。我试图在xn = xn1结尾处for loop,但似乎没有效果。

最后,每次我尝试将double变量值分配给double array[][]时,都会显示错误double cannot be converted to double[]

代码:

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

public class Newton {
    static double a, b, c;
    static double n = 1;
    static double xn;
    static double fxn;
    static double dfxn;
    static double xn1;

    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        System.out.println("Enter a");
        double a = s.nextDouble();
        System.out.println("Enter b");
        double b = s.nextDouble();
        System.out.println("Enter c");
        double c = s.nextDouble();
        System.out.println("Enter The value you want to start with");
        double xn = s.nextDouble();
        fxn = a * Math.pow(xn, 2) + b * xn + c;
        dfxn = 2 * a * xn + b;
        xn1 = xn - (fxn / dfxn);
        double array[][] = { n, xn, fxn, dfxn, xn + 1 };
        System.out.println();
        System.out.println("n\t" + "Xn\t" + "fXn\t" + "dfXn\t" + "Xn+1");
        array(array);
    }

    public static void array(int x[][]) {
        for (int row = 0; row < x.length; row++) {
            for (int column = 0; column < x[row].length; column++) {
                System.out.print(x[row][column] + "\t");
            }
            System.out.println();
        }
    }
}

2 个答案:

答案 0 :(得分:1)

至于此:double array[][] = {n, xn, fxn, dfxn, xn+1};

因为它是一个二维数组,所以它的初始化方式与其他数组不同:

double[][] array = new double[][]{
          { n, xn, fxn, dfxn, xn+1}
        };

现在,因为xn+1是一个操作,所以要将其括起来以便将其分配给数组:

double[][] array = new double[][]{
          { n, xn, fxn, dfxn, (xn+1)}
        };

此外,当您致电array(array);时,您尝试将double数组传递给int方法。尝试更改方法的构造函数:

public static void array(double[][] array){
    //...
}

最后,您需要在调用scanner方法之前关闭array,以防止资源泄露s.close();

答案 1 :(得分:1)

我在代码中发现的错误/错误是

  1. 初始化双打数组
    而是加倍array[][] = { n, xn, fxn, dfxn, xn + 1 };
    它应该是double array[][] = { { n, xn, fxn, dfxn, xn + 1 } };

  2. 您应该更改方法array的方法签名 而是public static void array(int x[][]) {
    使用public static void array(double x[][]) {

  3. 你永远不会关闭stram ss.close()添加到main方法的末尾。