我正在尝试编写一个允许我创建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.更多推荐
发布评论