Построить матрицу в Java Matrix Toolkit
У меня довольно наивный вопрос, касающийся Matrix Toolkit Java (MTJ): как мне построить Matrix B
начиная с double[][] A
?
Потому что в библиотеке Matrix
это только интерфейс, а не класс.
РЕДАКТИРОВАТЬ
Итак, я подумал, что имея JAMA
и MTJ решил бы проблему, так как в JAMA
можно напрямую определить Matrix
объекты, но это не сработало.
Мой код такой:
import java.util.Arrays; импорт джама. ; 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
Матричное определение.
Как мне решить проблему?
1 ответ
Вам не нужна 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, но, кажется, близко) для получения дополнительных возможностей.
Я предполагаю, что вам нужна плотная память для вашей матрицы. Если у вас есть разреженная матрица, то есть другие классы в MTJ, которые вы должны использовать вместо DenseMatrix
такой как CompColMatrix
или же SymmTridiagMatrix
классы. Какой из этих классов разреженных матриц вы бы использовали, зависит от типа разреженности, присущей представляемой матрице.
Однако в случае сомнений подход плотного хранения будет работать для всех возможных матриц. Преимущество использования разреженных матриц - это скорость и место для хранения, но только для матриц, которые соответственно разрежены.