Эрмитова матрица

Эрмитова матрица

Описание

Шаблонный класс hermitian_matrix<T, F1, F2, A> является базовым контейнером-адаптером для эрмитовых матриц. Для (n x n)-размерной эрмитовой матрицы и 0 <= i < n, 0 <= j < n, содержит hi, j = hj, i-. Содержимое эрмитовых матриц сжато.

Пример

#include <boost/numeric/ublas/hermitian.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    hermitian_matrix<std::complex<double>, lower> ml (3, 3);
    for (unsigned i = 0; i < ml.size1 (); ++ i) {
        for (unsigned j = 0; j < i; ++ j)
            ml (i, j) = std::complex<double> (3 * i + j, 3 * i + j);
        ml (i, i) = std::complex<double> (4 * i, 0);
    }
    std::cout << ml << std::endl;
    hermitian_matrix<std::complex<double>, upper> mu (3, 3);
    for (unsigned i = 0; i < mu.size1 (); ++ i) {
        mu (i, i) = std::complex<double> (4 * i, 0);
        for (unsigned j = i + 1; j < mu.size2 (); ++ j)
            mu (i, j) = std::complex<double> (3 * i + j, 3 * i + j);
    }
    std::cout << mu << std::endl;
}

Будет выведено на экран:

[3,3](((0,0),(3,-3),(6,-6)),((3,3),(4,0),(7,-7)),((6,6),(7,7),(8,0)))
[3,3](((0,0),(1,1),(2,2)),((1,-1),(4,0),(5,5)),((2,-2),(5,-5),(8,0)))

Определение

Определено в заголовочном файле hermitian.hpp.

Параметры шаблона

Параметр

Описание

Значение по умолчанию

T

Тип объектов, размещаемых в матрице.

F1

Функциональный элемент, описывающий тип эрмитовой матрицы. [1]

lower

F2

Функция, определяющая организацию хранения. [2]

row_major

A

Тип адаптированного (присоединенного) массива. [3]

unbounded_array<T>

Функции-члены

Функция-член

Описание

hermitian_matrix ()

Создает пустой hermitian_matrix с нулевым количеством строк и столбцов.

hermitian_matrix (size_type size)

Размещает в памяти пустую hermitian_matrix, которая содержит size1 строк и size2 столбцов.

hermitian_matrix (const hermitian_matrix &m)

Конструктор копирования.

template<class AE>
hermitian_matrix (const matrix_expression<AE> &ae)

Расширенный конструктор копирования.

void resize (size_type size, bool preserve = true)

Изменение размера hermitian_matrix до размера size1 строк и size2 столбцов. Существующие элементы hermitian_matrix сохраняются.

size_type size1 () const

Возвращает число строк.

size_type size2 () const

Возвращает число столбцов.

const_reference operator () (size_type i, size_type j) const

Возвращает const ссылку на элемент в i-ой строке и в j-ом столбце.

reference operator () (size_type i, size_type j)

Возвращает ссылку на элемент в i-ой строке и в j-ом столбце.

hermitian_matrix &operator = (const hermitian_matrix &m)

Оператор присваивания.

hermitian_matrix &assign_temporary (hermitian_matrix &m)

Устанавливает временную матрицу. Может изменять матрицу m.

template<class AE>
hermitian_matrix &operator = (const matrix_expression<AE> &ae)

Расширенный оператор присваивания.

template<class AE>
hermitian_matrix &assign (const matrix_expression<AE> &ae)

Задает матричное выражение для эрмитовой матрицы. Левая и правая части присваивания должны быть независимыми.

template<class AE>
hermitian_matrix &operator += (const matrix_expression<AE> &ae)

Вычисленный оператор присваивания. Добавляет матричное выражение к эрмитовой матрице.

template<class AE>
hermitian_matrix &plus_assign (const matrix_expression<AE> &ae)

Добавляет матричное выражение к эрмитовой матрице. Левая и правая части присваивания должны быть независимыми.

template<class AE>
hermitian_matrix &operator -= (const matrix_expression<AE> &ae)

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

template<class AE>
hermitian_matrix &minus_assign (const matrix_expression<AE> &ae)

Вычитает матричное выражение из эрмитовой матрицы. Левая и правая части присваивания должны быть независимыми.

template<class AT>
hermitian_matrix &operator *= (const AT &at)

Вычисленный оператор присваивания. Умножает эрмитову матрицу на число.

template<class AT>
hermitian_matrix &operator /= (const AT &at)

Вычисленный оператор присваивания. Делит эрмитову матрицу на число.

void swap (hermitian_matrix &m)

Обменивает содержимое эрмитовых матриц.

void insert (size_type i, size_type j, const_reference t)

Вставляет значение t в j-ый столбец i-ой строки.

void erase (size_type i, size_type j)

Удаляет значение t в j-ом столбце i-ой строки.

void clear ()

Очищает матрицу.

const_iterator1 begin1 () const

Возвращает const_iterator1, указывающий на начало hermitian_matrix.

const_iterator1 end1 () const

Возвращает const_iterator1, указывающий на конец hermitian_matrix.

iterator1 begin1 ()

Возвращает iterator1, указывающий на начало hermitian_matrix.

iterator1 end1 ()

Возвращает iterator1, указывающий на конец hermitian_matrix.

const_iterator2 begin2 () const

Возвращает const_iterator2, указывающий на начало hermitian_matrix.

const_iterator2 end2 () const

Возвращает const_iterator2, указывающий на конец hermitian_matrix.

iterator2 begin2 ()

Возвращает iterator2, указывающий на начало hermitian_matrix.

iterator2 end2 ()

Возвращает iterator2, указывающий на конец hermitian_matrix.

const_reverse_iterator1 rbegin1 () const

Возвращает const_reverse_iterator1, указывающий на начало инвертированной (обратной) hermitian_matrix.

const_reverse_iterator1 rend1 () const

Возвращает const_reverse_iterator1, указывающий на конец инвертированной (обратной) hermitian_matrix.

reverse_iterator1 rbegin1 ()

Возвращает reverse_iterator1, указывающий на начало инвертированной (обратной) hermitian_matrix.

reverse_iterator1 rend1 ()

Возвращает reverse_iterator1, указывающий на конец инвертированной (обратной) hermitian_matrix.

const_reverse_iterator2 rbegin2 () const

Возвращает const_reverse_iterator2, указывающий на начало инвертированной (обратной) hermitian_matrix.

const_reverse_iterator2 rend2 () const

Возвращает const_reverse_iterator2, указывающий на конец инвертированной (обратной) hermitian_matrix.

reverse_iterator2 rbegin2 ()

Возвращает reverse_iterator2, указывающий на начало инвертированной (обратной) hermitian_matrix.

reverse_iterator2 rend2 ()

Возвращает reverse_iterator2, указывающий на конец инвертированной (обратной) hermitian_matrix.

Примечание

[1] Поддерживаемые параметры типов эрмитовых матриц: lower и upper.

[2] Поддерживаемые параметры организации хранения: row_major и column_major.

[3] Поддерживаемые параметры приспособленных массивов: unbounded_array<T> , bounded_array<T> и std::vector<T> .

Эрмитов адаптер

Описание

Шаблонный класс hermitian_adaptor<M, F> является адаптером эрмитовой матрицы для других матриц.

Пример

#include <boost/numeric/ublas/hermitian.hpp>
#include <boost/numeric/ublas/io.hpp>

int main () {
    using namespace boost::numeric::ublas;
    matrix<std::complex<double> > m (3, 3);
    hermitian_adaptor<matrix<std::complex<double> >, lower> hal (m);
    for (unsigned i = 0; i < hal.size1 (); ++ i) {
        for (unsigned j = 0; j < i; ++ j)
            hal (i, j) = std::complex<double> (3 * i + j, 3 * i + j);
        hal (i, i) = std::complex<double> (4 * i, 0);
    }
    std::cout << hal << std::endl;
    hermitian_adaptor<matrix<std::complex<double> >, upper> hau (m);
    for (unsigned i = 0; i < hau.size1 (); ++ i) {
        hau (i, i) = std::complex<double> (4 * i, 0);
        for (unsigned j = i + 1; j < hau.size2 (); ++ j)
            hau (i, j) = std::complex<double> (3 * i + j, 3 * i + j);
    }
    std::cout << hau << std::endl;
}

Будет выведено на экран:

[3,3](((0,0),(3,-3),(6,-6)),((3,3),(4,0),(7,-7)),((6,6),(7,7),(8,0)))
[3,3](((0,0),(1,1),(2,2)),((1,-1),(4,0),(5,5)),((2,-2),(5,-5),(8,0)))

Определение

Определена в заголовочном файле hermitian.hpp.

Параметры шаблона

Параметр

Описание

Значение по умолчанию

M

Тип адаптированной (присоединенной) матрицы.

F

Функциональный элемент, описывающий тип эрмитова адаптера. [1]

lower

Функции-члены

Функция-член

Описание

hermitian_adaptor (matrix_type &data)

Создает hermitian_adaptor матрицы.

hermitian_adaptor (const hermitian_adaptor &m)

Конструктор копирования.

template<class AE>
hermitian_adaptor (const matrix_expression<AE> &ae)

Расширенный конструктор копирования.

size_type size1 () const

Возвращает число строк.

size_type size2 () const

Возвращает число столбцов.

const_reference operator () (size_type i, size_type j) const

Возвращает const ссылку на элемент в i-ой стоке и j-ом столбцы.

reference operator () (size_type i, size_type j)

Возвращает ссылку на элемент в i-ой стоке и j-ом столбцы.

hermitian_adaptor &operator = (const hermitian_adaptor &m)

Оператор присваивания.

hermitian_adaptor &assign_temporary (hermitian_adaptor &m)

Устанавливает временный адаптер. Может изменять эрмитов адаптер m.

template<class AE>
hermitian_adaptor &operator = (const matrix_expression<AE> &ae)

Расширенный оператор присваивания.

template<class AE>
hermitian_adaptor &assign (const matrix_expression<AE> &ae)

Задает матричное выражение для эрмитового адаптера. Левая и правая части присваивания должны быть независимыми.

template<class AE>
hermitian_adaptor &operator += (const matrix_expression<AE> &ae)

Вычисленный оператор присваивания. Добавляет матричное выражение к эрмитову адаптеру.

template<class AE>
hermitian_adaptor &plus_assign (const matrix_expression<AE> &ae)

Добавляет матричное выражение к эрмитову адаптеру. Левая и правая части присваивания должны быть независимыми.

template<class AE>
hermitian_adaptor &operator -= (const matrix_expression<AE> &ae)

Вычисленный оператор присваивания. Вычитает матричное выражение из эрмитового адаптера.

template<class AE>
hermitian_adaptor &minus_assign (const matrix_expression<AE> &ae)

Вычитает матричное выражение из эрмитового адаптера. Левая и правая части присваивания должны быть независимыми.

template<class AT>
hermitian_adaptor &operator *= (const AT &at)

Вычисленный оператор присваивания. Умножает эрмитов адаптер на скаляр.

template<class AT>
hermitian_adaptor &operator /= (const AT &at)

Вычисленный оператор присваивания. Делит эрмитов адаптер на скаляр.

void swap (hermitian_adaptor &m)

Обменивает содержимое эрмитовых адаптеров.

const_iterator1 begin1 () const

Возвращает const_iterator1, указывающий на начало hermitian_adaptor.

const_iterator1 end1 () const

Возвращает const_iterator1, указывающий на конец hermitian_adaptor.

iterator1 begin1 ()

Возвращает iterator1, указывающий на начало hermitian_adaptor.

iterator1 end1 ()

Возвращает iterator1, указывающий на конец hermitian_adaptor.

const_iterator2 begin2 () const

Возвращает const_iterator2, указывающий на начало hermitian_adaptor.

const_iterator2 end2 () const

Возвращает const_iterator2, указывающий на конец hermitian_adaptor.

iterator2 begin2 ()

Возвращает iterator2, указывающий на начало hermitian_adaptor.

iterator2 end2 ()

Возвращает iterator2, указывающий на конец hermitian_adaptor.

const_reverse_iterator1 rbegin1 () const

Возвращает const_reverse_iterator1, указывающий на начало инвертированного (обратного) hermitian_adaptor.

const_reverse_iterator1 rend1 () const

Возвращает const_reverse_iterator1, указывающий на конец инвертированного (обратного) hermitian_adaptor.

reverse_iterator1 rbegin1 ()

Возвращает reverse_iterator1, указывающий на начало инвертированного (обратного) hermitian_adaptor.

reverse_iterator1 rend1 ()

Возвращает reverse_iterator1, указывающий на конец инвертированного (обратного) hermitian_adaptor.

const_reverse_iterator2 rbegin2 () const

Возвращает const_reverse_iterator2, указывающий на начало инвертированного (обратного) hermitian_adaptor.

const_reverse_iterator2 rend2 () const

Возвращает const_reverse_iterator2, указывающий на конец инвертированного (обратного) hermitian_adaptor.

reverse_iterator2 rbegin2 ()

Возвращает reverse_iterator2, указывающий на начало инвертированного (обратного) hermitian_adaptor.

reverse_iterator2 rend2 ()

Возвращает reverse_iterator2, указывающий на конец инвертированного (обратного) hermitian_adaptor.

Примечание

[1] Поддерживаемые параметры типов эрмитовых адаптеров: lower и upper.


Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided ``as is'' without express or implied warranty, and with no claim as to its suitability for any purpose.

Перевод с оригинала: Кулиш. В. И. 2006 год.