Изменить собственную матрицу диагонали

у меня есть Eigen::MatrixXd и мне нужно изменить значение элементов в его диагонали. В частности у меня есть другой Eigen::MatrixXd с одним столбцом и таким же количеством строк первой матрицы.

Мне нужно вычесть на диагональ первой матрицы значение элементов второй матрицы.

Пример:

A
1 2 3
4 5 6
7 8 9

B
1
1
1A'
0 2 3
4 4 6
7 8 8

Как я могу сделать?

6

Решение

Это работает для меня:

A_2=A-B.asDiagonal();
6

Другие решения

Самый простой и быстрый способ сделать это:

Eigen::MatrixXd A1(3,3), B(3,1), A2;
...
A2 = A1;
A2.diagonal() -= B;

конечно, лучше использовать VectorXd тип для векторов (здесь для B) и, наконец, если B является постоянным, то вы можете использовать массивы:

A2.diagonal().array() -= 1;
5

Матрица манипуляций в Eigen работает очень похоже на массив. Индексирование начинается с нуля и является основным. Документация (Эйген: Матричный класс хорошо написано и может помочь вам решить будущие проблемы.

Для вашей заявленной проблемы решение приведено ниже.

#include <iostream>
#include <eigen3/Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd matA(3,3), matB(3,1);
matA<<1,2,3,
4,5,6,
7,8,9;
matB<<1,1,1;
for(int i=0; i<3;i++)
matA(i,i) -= matB(i);
std::cout<<matA<<std::endl;
return 0;
}

Однако я бы использовал Matrix3d ​​и Vector3d для первой и второй матрицы соответственно.

0

for(int i = 0; i < matrix1.rows(); ++i)
matrix1(i, i) -= matrix2(i, 0);

Этот код перебирает каждую строку матрицы (matrix1.rows()) и вычитает соответствующее значение матрицы2 (matrix2(i, 0)) из диагоналей в матрице1 (matrix1(i, i)).

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector