Java JAMA不兼容无法转换错误

Java JAMA不兼容无法转换错误,java,matrix,eigenvector,eigenvalue,jama,Java,Matrix,Eigenvector,Eigenvalue,Jama,我正试图编写一个代码,允许我创建一个2x2矩阵,然后使用JAMA库()计算我刚刚创建的矩阵的特征值和特征向量。然后,我将比较特征值和使用迹确定形式的分析方法 我的代码如下。第一块是生成2x2矩阵,然后第二块是计算特征值和特征向量的代码 import Jama.Matrix; import Jama.EigenvalueDecomposition; import Jama.*; import java.util.Scanner; /** * Code to generate a 2x2 mat

我正试图编写一个代码,允许我创建一个2x2矩阵,然后使用JAMA库()计算我刚刚创建的矩阵的特征值和特征向量。然后,我将比较特征值和使用迹确定形式的分析方法

我的代码如下。第一块是生成2x2矩阵,然后第二块是计算特征值和特征向量的代码

import Jama.Matrix;
import Jama.EigenvalueDecomposition;
import Jama.*;
import java.util.Scanner;

/**
 * Code to generate a 2x2 matrix then find its eigenvalues and eigenvectors
 * Check eigenvalue computation using trick for 2x2 case 
 * ^(only possible for 2x2, not in general possible for general nxn)
 */
public class Matrix_For_Eval_Calc
{
    // instance variables - replace the example below with your own
    public Matrix A;
    // Create empty 2x2 array

    /**
     * Constructor for objects of class EigenvalueProblem
     * Input elements in array
     * Fill in elements of 2x2 matrix
     */
     public void PopulateMatrix()
    {
        // initialise instance variables
        // Prompt User Input for a_1,1 a_1,2 a_2,1 and a_2,2
        Scanner in = new Scanner(System.in);

        System.out.println("Enter the element a_{1,1}: ");
        double a_11 = in.nextInt();
        System.out.println("a_{1,1} = " + a_11 );

        System.out.println("Enter the element a_{1,2}: ");
        double a_12 = in.nextInt();
        System.out.println("a_{1,2} = " + a_12 );

        System.out.println("Enter the element a_{2,1}: ");
        double a_21 = in.nextInt();
        System.out.println("a_{2,1} = " + a_21 );

        System.out.println("Enter the element a_{2,2}: ");
        double a_22 = in.nextInt();
        System.out.println("a_{2,2} = " + a_22 );

        double[][] array = { {a_11 , a_12} , {a_21 , a_22} };
        Matrix A = new Matrix(array); 
        // System.out.println(A);
        // System.out.println(a_11 + "," + a_12);
        // System.out.println(a_21 + "," + a_22);
    }

}
这是为了创建矩阵。然后我想在下一个代码中使用这个矩阵。当我使用“returna;”时另一个错误是“不兼容类型:意外返回值”

当我创建一个矩阵时,用值填充,然后尝试在下一段代码中使用该值,我得到一个关于不兼容文件类型的错误,并且矩阵\u For\u Eval\u Calc无法转换为矩阵。我想这是因为没有回报矩阵,但不确定如何补救

非常感谢您的建议

编辑:

第二部分

import Jama.Matrix;
import Jama.EigenvalueDecomposition;
import Jama.*;
import java.util.Scanner;

/**
 * Write a description of class EvalCalculation here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class EvalCalculation
{
    // instance variables - replace the example below with your own
    //private int x;

    public void eigenvalueCalc(Matrix inputMatrix) 
    {
        EigenvalueDecomposition someMatrix = new EigenvalueDecomposition(inputMatrix);
        Matrix S = someMatrix.getV();
        System.out.println("V = " + S);
        // Compute Evals and e-vecs
        // Print out
    }
}
我创建一个矩阵,填充它。然后使用您建议的输入

MatrixForEvalCalc matrixWrapper = new MatrixForEvalCalc();
matrixWrapper.PopulateMatrix();
EigenvalueCalc(matrixWrapper.A);
然后我得到一个输出 V=Jama。Matrix@1b213c5


关于如何使其正确输出矩阵,有什么建议吗?

请注意
PopulateMatrix()的返回类型。

你说它什么也不返回,把它设为void,所以当你试图返回一个
矩阵时,你会收到一条错误消息,说这是一个意外的返回类型

如果要从
PopulateMatrix()
返回
矩阵
,则应将其返回类型更改为
矩阵

public void PopulateMatrix() { ... }
public Matrix PopulateMatrix() {
    // rest of the code
    double[][] array = { {a_11 , a_12} , {a_21 , a_22} };
    Matrix A = new Matrix(array);
    return A;
}
但也许这并不是你想要的。您已经声明了一个实例字段
矩阵A
。当您执行
Matrix A=new Matrix(array)
操作时,您正在创建一个具有相同名称的局部变量,而不是为实例字段赋值。如果您想执行后面的操作,可以将返回类型保留为
void

public void PopulateMatrix() {
    // rest of the code
    double[][] array = { {a_11 , a_12} , {a_21 , a_22} };
    this.A = new Matrix(array);
}
并直接访问该字段(因为您已将其公开):

作为旁注,在命名变量、方法和类时,应尽量遵循Java约定:

  • 变量名应该是以小写字母开头的驼峰大小写:
    InputMatrix
    应该是
    InputMatrix
  • 方法名称应该是以小写字母开头的驼峰大小写:
    PopulateMatrix()
    应该是
    PopulateMatrix()
    indigherCalc()
    应该是
    indigherCalc()
  • 类名应该是以大写字母开头的驼峰大小写:
    Matrix\u For\u Eval\u Calc
    应该是
    MatrixForEvalCalc

  • 非常感谢。我按照你的建议做了一些编辑,但现在输出不太正确。我需要将输出输出为矩阵。@JaredBland如果需要打印JAMA
    matrix
    ,可能应该使用
    matrix.print()
    。请看下面的图片。
    public Matrix PopulateMatrix() {
        // rest of the code
        double[][] array = { {a_11 , a_12} , {a_21 , a_22} };
        Matrix A = new Matrix(array);
        return A;
    }
    
    public void PopulateMatrix() {
        // rest of the code
        double[][] array = { {a_11 , a_12} , {a_21 , a_22} };
        this.A = new Matrix(array);
    }
    
    Matrix_For_Eval_Calc matrixWrapper = new Matrix_For_Eval_Calc();
    matrixWrapper.PopulateMatrix();
    EigenvalueCalc(matrixWrapper.A);