【问题标题】:Newton's Raphsons Method Java牛顿的 Raphsons 方法 Java
【发布时间】:2017-09-15 22:07:00
【问题描述】:

我想将我的牛顿拉夫森方法的数据制成表格,仅适用于整齐数组中的二次方程。我遇到的困难是在数组中分配变量,将 xn1 的前一个值分配给后续行中的 xn 值,并在数组中具有双精度值。

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

在[image]中,第一行的xn+1值变成了第二行的xn值。我很难做到这一点。我尝试在for loop 末尾添加xn = xn1,但这似乎不起作用。

最后,每次我尝试将 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();
        }
    }
}

【问题讨论】:

    标签: java arrays math newtons-method


    【解决方案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){
        //...
    }
    

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

    【讨论】:

      【解决方案2】:

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

      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 s
        在 main 方法的末尾添加s.close()

      【讨论】:

        猜你喜欢
        • 2013-10-17
        • 1970-01-01
        • 2015-08-22
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        相关资源
        最近更新 更多