2013-06-04 3 views
1

У меня есть довольно наивный вопрос, касающийся Matrix Toolkit Java (MTJ): как я построить Matrix B начиная с double[][] A?Построить матрицу в Matrix Toolkit Java

Причина, в библиотеке, Matrix это только интерфейс и не класс.

EDIT

Итак, я подумал, что с JAMA и «MTJ» решило бы эту проблему, так как в JAMA это можно непосредственно определить Matrix объекты, но это не сработало.

Мой код заключается в следующем:

импорт java.util.Arrays; импорт Jama. ; импорт 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

Можете ли вы показать нам API Doc? – Smit

+0

Посмотрите здесь [JAMA API] (http://math.nist.gov/javanumerics/jama/doc/) – Smit

+0

, так что я ожидал: класс 'Matrix' спускается из библиотеки' JAMA'. – fpe

ответ

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, но кажется близкой) для получения дополнительных параметров.

Я предполагаю, что вам нужна плотная память для вас. Если у вас есть sparse matrix, то в MTJ есть другие классы, которые вы должны использовать вместо DenseMatrix, таких как классы CompColMatrix или SymmTridiagMatrix. Какой из этих разреженных классов матриц вы будете использовать, зависит от типа разреженности, присущего представленной матрице.

В случае сомнений, однако, подход с плотным хранением будет работать для всех возможных матриц. Преимущество использования разреженных матриц - скорость и пространство для хранения, но только для матриц, которые являются соответственно разреженными.

Смежные вопросы