Java JAMA不兼容无法转换错误(Java JAMA Incompatible Cannot be Converted Error)

编程入门 行业动态 更新时间:2024-10-26 19:40:23
Java JAMA不兼容无法转换错误(Java JAMA Incompatible Cannot be Converted Error)

我正在尝试编写一个允许我创建2x2矩阵的代码,然后使用JAMA库( http://math.nist.gov/javanumerics/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); } }

那是为了创建矩阵。 然后我想在下一个代码中使用该矩阵。 当我使用''返回A; ''我得到另一个错误,说“不兼容的类型:意外的返回值”

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 }

当我创建一个矩阵,使用值填充,然后尝试在下一位代码中使用它时,我收到有关不兼容文件类型的错误,并且Matrix_For_Eval_Calc无法转换为Matrix。 我想这是因为没有返回矩阵,但不确定如何解决这个问题。

任何意见是极大的赞赏。

编辑:

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 MatrixForEvalCalc { // 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} }; this.A = new Matrix(array); // return A; } }

第二部分

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

关于如何正确输出矩阵的任何建议?

I'm trying to write a code that allows me to create a 2x2 matrix, then use the JAMA library (http://math.nist.gov/javanumerics/jama/) to calculate the eigenvalues and eigenvectors of the matrix I just created. Then, I'll compare eigenvalues with the analytical method using the trace-determinate form.

My code is below. The first block is to generate the 2x2 matrix, then the second block of code to compute the eigenvalues and eigenvectors

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); } }

That is for the creation of the matrix. And then I want to use that matrix in the next code. When I use ''return A; '' I get another error saying "incompatible types: unexpected return value"

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 }

When I create a matrix, populate with with values, then try to use that in the next bit of code, I get an error about incompatible file types and that Matrix_For_Eval_Calc cannot be converted to a Matrix. I imagine that this is because there is no return matrix, but not sure how to remedy that.

Any advice is greatly appreciated.

EDIT:

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 MatrixForEvalCalc { // 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} }; this.A = new Matrix(array); // return A; } }

The second part

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 } }

I create a matrix, populate it. Then use the input you suggested of

MatrixForEvalCalc matrixWrapper = new MatrixForEvalCalc(); matrixWrapper.PopulateMatrix(); EigenvalueCalc(matrixWrapper.A);

Then I get as an output V = Jama.Matrix@1b213c5

Any advice on how to make it output a matrix properly?

最满意答案

注意PopulateMatrix()的返回类型:

public void PopulateMatrix() { ... }

你说它没有返回任何东西,因为它使它void所以当你试图返回一个Matrix你会收到一条错误信息,说这是一个意想不到的返回类型。

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

public Matrix PopulateMatrix() { // rest of the code double[][] array = { {a_11 , a_12} , {a_21 , a_22} }; Matrix A = new Matrix(array); return A; }

但也许这不是你想要的。 您已经声明了一个实例字段Matrix 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); }

并直接访问该字段(因为您将其公开):

Matrix_For_Eval_Calc matrixWrapper = new Matrix_For_Eval_Calc(); matrixWrapper.PopulateMatrix(); EigenvalueCalc(matrixWrapper.A);

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

变量名称应为驼峰大小写,以小写字母开头: InputMatrix应为InputMatrix 。 方法名称应为驼峰大小写,以小写字母开头: PopulateMatrix()应为populateMatrix() , EigenvalueCalc()应为eigenvalueCalc() 。 类名应该是以大写字母开头的驼峰: Matrix_For_Eval_Calc应该是MatrixForEvalCalc 。

Note the return type of PopulateMatrix():

public void PopulateMatrix() { ... }

You say it returns nothing, by making it void so when you try to return a Matrix you get an error message saying this is an unexpected return type.

If you want to return a Matrix from PopulateMatrix(), you should change its return type to Matrix:

public Matrix PopulateMatrix() { // rest of the code double[][] array = { {a_11 , a_12} , {a_21 , a_22} }; Matrix A = new Matrix(array); return A; }

But perhaps this is not exactly what you want. You have already declared an instance field Matrix A. When you do Matrix A = new Matrix(array) you are creating a local variable with the same name, and not assigning a value to the instance field. If you want to do the later, you could keep the return type as void:

public void PopulateMatrix() { // rest of the code double[][] array = { {a_11 , a_12} , {a_21 , a_22} }; this.A = new Matrix(array); }

And access the field directly (since you made it public):

Matrix_For_Eval_Calc matrixWrapper = new Matrix_For_Eval_Calc(); matrixWrapper.PopulateMatrix(); EigenvalueCalc(matrixWrapper.A);

As a side note, you should try to follow the Java conventions when naming your variables, methods and classes:

Variable names should be camel case starting with lowercase: InputMatrix should be InputMatrix. Method names should be camel case starting with lowercase: PopulateMatrix() should be populateMatrix() and EigenvalueCalc() should be eigenvalueCalc(). Class names should be camel case starting with uppercase: Matrix_For_Eval_Calc should be MatrixForEvalCalc.

更多推荐

本文发布于:2023-07-22 10:06:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1219222.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不兼容   错误   JAMA   Java   Converted

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!