我有一个很天真的问题,关于 Matrix Toolkit Java (MTJ):如何从Matrix B
开始构建double[][] A
?
因为,在图书馆中,Matrix
只是界面,而不是类。
修改
所以,我认为拥有JAMA
和'MTJ'可以解决问题,因为在JAMA
中可以直接定义Matrix
个对象,但它没有用。
我的代码是:
import java.util.Arrays; 进口Jama。; import no.uib.cipr.matrix。;
public class MainCalc extends TurbulentModel {
public static void main(String[] args){
// TurbulentModel A = new TurbulentModel();
// A.numberOfPointsAlongX = 4096;
// A.numberOfPointsAlongY = 3;
// A.numberOfPointsAlongZ = 3;
// A.averageHubWindSpeed = 8;
// A.durationOfWindFile = 600;
// A.hubHeight = 90;
// A.turbulentSeedNumber = 1;
// A.volumeWidthAlongY = 150;
// A.volumeHeightAlongZ = 150;
// float[] pointsYCoord = A.calcPointsYCoord();
// float[] pointsZCoord = A.calcPointsZCoord();
double[][] rr = {{2, -1, 0},{-1, 2, -1},{0, -1, 2}};
Matrix test = new Matrix(rr);
LowerTriangPackMatrix test1 = new LowerTriangPackMatrix(test);
System.exit(0);
}
}
但它已被解决为JAMA s
矩阵concept and MTJ's
Matrix`定义之间明显的冲突。
我该如何解决这个问题?
答案 0 :(得分:2)
您不需要JAMA在MTJ中创建矩阵。事实上,正如你已经发现的那样,JAMA将会阻碍MTJ。
在MTJ中创建矩阵对象的最简单方法是使用实现DenseMatrix
接口的Matrix
类。其构造函数之一接受double[][]
并创建一个矩阵,其条目是输入数组中给出的条目。例如,
// create array of backing values for an n-by-n matrix
double[][] matValues = new double[n][n];
... // initialize values somehow
// create a matrix from the matValues array with deep-copy semantics
// the matrix A is independent of any changes to the matValues array and vis-versa
Matrix A = new DenseMatrix(matValues);
// create a matrix from the matValues array **without** deep-copy semantics
// the matrix B will reflect any changes made to the matValues array and vis-versa
Matrix B = new DenseMatrix(matValues, false);
还有其他构造函数,但这两种形式似乎与您的需求最相关。您应该查阅javadoc(请注意,这不适用于最新版本1.01,但似乎已关闭)以获取更多选项。
我认为您需要密集存储矩阵。如果您有sparse matrix,那么您应该使用MTJ中的其他类代替DenseMatrix
,例如CompColMatrix
或SymmTridiagMatrix
类。您将使用哪些稀疏矩阵类取决于所表示的矩阵固有的稀疏类型。
然而,如果有疑问,密集存储方法将适用于所有可能的基质。使用稀疏基质的好处是速度和存储空间,但仅限于适当稀疏的基质。