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

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

Другие вопросы по тегам