Как связать комплексное сопряжение верхней треугольной матрицы с нижней треугольной матрицей с Eigen - PullRequest
0 голосов
/ 21 января 2019

У меня есть квадрат Eigen::MatrixXcd x, который имеет комплексные значения, назначенные верхней треугольной части, включая диагональную ось, и некоторые случайные значения, назначенные нижней треугольной части, как этот (пример 4x4):

X00  X01  X02  X03
X10  X11  X12  X13
X20  X21  X22  X23
X30  X31  X32  X33

Я хочу присвоить комплексные сопряженные значения верхней треугольной части нижней, чтобы она выглядела так:

X00       X01        X02        X03
conj(X01) X11        X12        X13
conj(X02) conj(X12)  X22        X23
conj(X03) conj(X13)  conj(X23)  X33

Как мне правильно выразить это назначение для матриц произвольного размера?

1 Ответ

0 голосов
/ 21 января 2019

Во многих случаях вам не нужно этого делать, а вместо этого просто используйте (вместо X):

X.selfadjointView<Eigen::Upper>()

Особенно, для больших матриц это может уменьшить необходимую пропускную способность памяти (и пространство кеша). Однако для более мелких матриц это приводит к некоторым накладным расходам. Поэтому, чтобы скопировать сопряженный верхний правый угол строго в нижний левый, напишите:

X.triangularView<Eigen::StrictlyLower>() = X.adjoint();

Для обоих вариантов X должно быть квадратным, конечно.

...