Вопрос

Мне нужно внедрить формулу умножения, где матрица строки размера 'n' должна быть умножена на матрицу n*n ..

Я использовал класс Densematrix для создания матрицы N*N из 2D -массива ... но моя проблема в том, как создать вектор строки ...

Я могу использовать класс Comprowmatrix для создания матрицы строки ... но для этого ввод должен быть «матрица» .. но матрица - это интерфейс .. не может его создавать. Первый конструктор Comprowmatrix Class Государства требуют «ненулевого массива индексов» в качестве ввода ... но я не могу понять, что это за нулевой массив индексов ??

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

пожалуйста, помощь

Это было полезно?

Решение

А CompRowMatrix Класс на самом деле не предназначен для использования в качестве вектора строки, скорее, он используется для представления редких матриц таким образом, что его легко идентифицировать по строке матричных элементов.

Пока можно использовать CompRowMatrix В качестве вектора, устанавливая все строки, отличные от 1-го по ноль, это сложнее для вас как программиста и менее эффективно для кода, который должен предположить, что другие ряды могут потенциально стать ненулевыми.

Вместо этого используйте DenseVector объект для удержания вектора строки и использования мультюр Метод из Matrix интерфейс. Он принимает два Vector Объекты в качестве аргументов и создают продукт вектора-матрицы. Метод вызывается на объекте матрицы, умноженный на следующие аргументы:

  • 1 -й арг, x, вектор, который вы хотите размножаться с матрицей
  • 2 -й арг, y, имеет результат умножения

Итак, чтобы произвести продукт вектора-матрицы y = x*A (где оба x а также y находятся 1Иксnрядные векторы и A является nИксn Матрица), вы бы сделали что -то вроде этого:

// create matrix A
double[][] matValues = new double[n][n];
... // initialize values of the matrix
Matrix A = new DenseMatrix(matValues);

// create vector x
double[] vecValues = new double[n];
... // initialize values of the vector
Vector x = new DenseVector(vecValues);

// create vector y to store result of multiplication
Vector y = new DenseVector(n);

// perform multiplication
A.mult(x, y);

Теперь вы можете использовать y В остальной части вашего кода по мере необходимости. Важно, чтобы вы выделяли y Перед умножением, но это не имеет значения, какие данные он содержит. А mult метод будет перезаписать все, что находится в y на выходе.

Также обратите внимание, что способы, которыми я решил инициализировать x а также A были не единственными способами доступны. Например, приведенный выше код автоматически глубоко копирует массивы vecValues а также matValues При построении соответствующего Vector а также Matrix объекты. Если вы не собираетесь использовать массивы для какой -либо другой цели, то вы, вероятно, не должны выполнять эту глубокую копию. Вы делаете это, передав дополнительный логический параметр, установленную FALSE в конструкторе, например,

// create matrix A without deep copying matValues
Matrix A = new DenseMatrix(matValues, false);

Вам следует обратиться к Javadoc и вы, и я связал ранее для получения дополнительных вариантов конструктора. Имейте в виду, однако, что сказал, что Javadoc предназначен для другой версии, что текущее выпуск MTJ (версия 1.01 на момент времени этого поста). Я не знаю, какая это версия, и я не смог найти Javadoc для текущей версии, но я заметил несколько различий между ним и текущий исходный код.

Другие советы

Если я пойму ваш вопрос, одним из решений будет создание матрицы с одной строкой и N столбцами для председателя матрицы NXN. Существуют процедуры для умножения векторов, но я считаю, что все они имеют вектор после подъема матрицы. Если вы хотите использовать эти процедуры, вам придется провести соответствующие транспозы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top