Conjugate transpose: Difference between revisions

Content added Content deleted
m (C++ code made slightly shorter)
m (Added constructor taking an initializer list to C++ complex_matrix class)
Line 332: Line 332:


complex_matrix(size_t rows, size_t columns)
complex_matrix(size_t rows, size_t columns)
: rows_(rows), columns_(columns) {
: rows_(rows), columns_(columns), elements_(rows * columns) {}

elements_.resize(rows * columns);
}
complex_matrix(size_t rows, size_t columns, element_type value)
complex_matrix(size_t rows, size_t columns, element_type value)
: rows_(rows), columns_(columns), elements_(rows * columns, value) {}
: rows_(rows), columns_(columns), elements_(rows * columns, value) {}

complex_matrix(size_t rows, size_t columns,
const std::initializer_list<std::initializer_list<element_type>>& values)
: rows_(rows), columns_(columns), elements_(rows * columns) {
assert(values.size() <= rows_);
size_t i = 0;
for (const auto& row : values) {
assert(row.size() <= columns_);
std::copy(begin(row), end(row), row_data(i++));
}
}


size_t rows() const { return rows_; }
size_t rows() const { return rows_; }
Line 366: Line 376:
a.elements_ == b.elements_;
a.elements_ == b.elements_;
}
}

private:
private:
size_t rows_;
size_t rows_;
Line 480: Line 491:


int main() {
int main() {
complex_matrix<double> matrix1(3, 3);
using matrix = complex_matrix<double>;
complex_matrix<double> matrix2(3, 3);
complex_matrix<double> matrix3(3, 3);


matrix1.at(0, 0) = {2, 0};
matrix matrix1(3, 3,
matrix1.at(0, 1) = {2, 1};
{{{2, 0}, {2, 1}, {4, 0}},
matrix1.at(0, 2) = {4, 0};
{{2, -1}, {3, 0}, {0, 1}},
matrix1.at(1, 0) = {2, -1};
{{4, 0}, {0, -1}, {1, 0}}});
matrix1.at(1, 1) = {3, 0};
matrix1.at(1, 2) = {0, 1};
matrix1.at(2, 0) = {4, 0};
matrix1.at(2, 1) = {0, -1};
matrix1.at(2, 2) = {1, 0};


double n = std::sqrt(0.5);
double n = std::sqrt(0.5);
matrix2.at(0, 0) = {n, 0};
matrix matrix2(3, 3,
matrix2.at(0, 1) = {n, 0};
{{{n, 0}, {n, 0}, {0, 0}},
matrix2.at(0, 2) = {0, 0};
{{0, -n}, {0, n}, {0, 0}},
matrix2.at(1, 0) = {0, -n};
{{0, 0}, {0, 0}, {0, 1}}});
matrix2.at(1, 1) = {0, n};
matrix2.at(1, 2) = {0, 0};
matrix2.at(2, 0) = {0, 0};
matrix2.at(2, 1) = {0, 0};
matrix2.at(2, 2) = {0, 1};


matrix3.at(0, 0) = {2, 2};
matrix matrix3(3, 3,
matrix3.at(0, 1) = {3, 1};
{{{2, 2}, {3, 1}, {-3, 5}},
{{2, -1}, {4, 1}, {0, 0}},
matrix3.at(0, 2) = {-3, 5};
matrix3.at(1, 0) = {2, -1};
{{7, -5}, {1, -4}, {1, 0}}});
matrix3.at(1, 1) = {4, 1};
matrix3.at(1, 2) = {0, 0};
matrix3.at(2, 0) = {7, -5};
matrix3.at(2, 1) = {1, -4};
matrix3.at(2, 2) = {1, 0};


test(matrix1);
test(matrix1);