Эйген пишет функцию, которая принимает на вход все комплексные матрицы?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Эйген пишет функцию, которая принимает на вход все комплексные матрицы?

Сообщение Anonymous »

Я пытаюсь написать функцию для произведения Кронекера, которая принимает все типы сложных матриц (для начала), например Я могу ввести MatrixXcf и Matrix2cf , и он выведет произведение Кронекера из этих двух как MatrixXcf, но я столкнулся с проблемой. В нынешнем виде у меня есть

Код: Выделить всё

#pragma once
#include 
#include 
#include 

Eigen::MatrixXcf otimes(Eigen::MatrixXcf& A, Eigen::MatrixXcf& B) {
//Get Number of Columns
int C_col = A.cols() * B.cols();
int C_row = A.rows() * B.rows();
//Define new matrix
Eigen::MatrixXcf C(C_row, C_col);
//Populate C
Eigen::Index i_A = 0;
Eigen::Index i_B = 0;
Eigen::Index j_A = 0;
Eigen::Index j_B = 0;
for (int i = 0; i < C_row; i++) {
for (int j = 0; j < C_col; j++) {
i_A = Eigen::Index(floor(i / B.cols()));
j_A = Eigen::Index(floor(j / B.cols()));
i_B = Eigen::Index(i % A.cols());
j_B = Eigen::Index(j % A.cols());
C(i,j) = A(i_A,j_A)* B(i_B,j_B);
}
}
return C;
}
Это я протестировал с двумя Eigen::MatrixXcf и дал ожидаемый результат.
Однако всякий раз, когда я пытаюсь поместите некоторые другие типы матриц, например. один «Matrix2cf» я получаю ошибки компиляции. Например,

Код: Выделить всё

#pragma once
#include 
#include 

using namespace std::complex_literals;

namespace Pauli {
Eigen::Matrix2cf Px{
{0, 1},
{1, 0}
};

Eigen::Matrix2cf Py{
{0, -1.0if},
{1.0if, 0}
};

Eigen::Matrix2cf Pz{
{1, 0},
{0, -1}
};
}

otimes(Pauli::Pz, Pauli::Pz)
Это вызывает ошибку

Код: Выделить всё

Severity    Code    Description Project File    Line    Suppression State   Details
Error (active)  E0434   a reference of type "Eigen::MatrixXcf &" (aka "Eigen::Matrix &") (not const-qualified) cannot be initialized with a value of type "Eigen::Matrix2cf" (aka "Eigen::Matrix")  DMRG.exe - x64 Debug
для строки, где я пытаюсь использовать две матрицы фиксированного размера 2. Я бы не хотел просто переключать их на MatrixXd , поскольку я знаю, что их размер по существу фиксирован быть массивом 2 на 2, и я хотел бы избежать использования дополнительной памяти при использовании динамических матриц.
Кроме того, попытка пройти через единичную матрицу

Код: Выделить всё

int n = 2;
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79369941/eigen-writing-a-function-that-takes-all-complex-matrices-as-inputs[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Эйген пишет функцию, которая принимает на вход все комплексные матрицы?
    Anonymous » » в форуме C++
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Эйген пишет функцию, которая принимает на вход все комплексные матрицы?
    Anonymous » » в форуме C++
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Эйген, как сравнить все строки матрицы без цикла [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Эйген не может соответствовать унарной функции
    Anonymous » » в форуме C++
    0 Ответы
    31 Просмотры
    Последнее сообщение Anonymous
  • Эйген: Что выдает argmax/argmin при применении к тензору с повторяющимися значениями?
    Anonymous » » в форуме C++
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»