帶狀矩陣(Banded Matrix)

帶狀矩陣(Banded Matrix)

說明

模板類banded_matrix<T, F, A> 是帶狀矩陣的基容器適配器( base container adaptor )。對於一個(m x n)-維帶狀矩陣且有l 條下對角線和u 條上對角線且0 <= i < m, 0 <= j < n ,如果 i > j + l or i < j - u,那麼就滿足bi, j = 0。帶狀矩陣的存儲是緊密的(packed)。

例子

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

int main () {
    using namespace boost::numeric::ublas;
    banded_matrix<double> m (3, 3, 1, 1);
    for (signed i = 0; i < signed (m.size1 ()); ++ i)
        for (signed j = std::max (i - 1, 0); j < std::min (i + 2, signed (m.size2 ())); ++ j)
            m (i, j) = 3 * i + j;
    std::cout << m << std::endl;
}

定義

定義在頭文件 banded.hpp 中。

模板參數

參數 說明 缺省值
T 存儲在矩陣中的對象的類型。
F 描述存儲組織的函數對象。 [1] row_major
A 適配數組(adapted array)的類型。 [2] unbounded_array<T>

模型(Model of)

矩陣(Matrix)

類型要求(Type requirements)

沒有,除了由矩陣(Matrix) 所施加的類型要求。

公有基類(Public base classes)

matrix_container<banded_matrix<T, F, A> >

成員

成員 說明
banded_matrix () 分配一個包含0行0個元素的未初始化的banded_matrix
banded_matrix (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0) 分配一個包含未初始化的size1size2個元素的banded_matrix。在主對稱角周圍有(lower + 1 + upper)條對角線。
banded_matrix (const banded_matrix &m) 拷貝構造函數。
template<class AE>
banded_matrix (const matrix_expression<AE> &ae)
擴展拷貝構造函數。
void resize (size_type size1, size_type size2, size_type lower = 0, size_type upper = 0, bool preserve = true) 重新分配一個未初始化的size1size2個元素的banded_matrix。在主對稱角周圍有(lower + 1 + upper)條對角線。 如果指定,banded_matrix中已經存在的元素將會被保留。
size_type size1 () const 返回行數。
size_type size2 () const 返回列數。
size_type lower () const 返回在主對稱線之下的對角線數。
size_type upper () const 返回在主對角線之上的對角線數。
const_reference operator () (size_type i, size_type j) const 返回第i-th行第i-th的元素的const引用。
reference operator () (size_type i, size_type j) 返回第i-th行第i-th的元素的引用。
banded_matrix &operator = (const banded_matrix &m) 賦值運算符。
banded_matrix &assign_temporary (banded_matrix &m) 賦值給一個臨時變量。可能會改變帶狀矩陣m
template<class AE>
banded_matrix &operator = (const matrix_expression<AE> &ae)
擴展的賦值運算符。
template<class AE>
banded_matrix &assign (const matrix_expression<AE> &ae)
將一個矩陣表達式賦給一個帶狀矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
banded_matrix &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個矩陣表達式加到一個帶狀矩陣。
template<class AE>
banded_matrix &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣表達式加到一個帶狀矩陣。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
banded_matrix &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從一個帶狀矩陣中減去一個矩陣表達式。
template<class AE>
banded_matrix &minus_assign (const matrix_expression<AE> &ae)
從一個帶狀矩陣中減去一個矩陣表達式。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
banded_matrix &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個帶狀矩陣乘以一個標量。
template<class AT>
banded_matrix &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。將一個帶狀矩陣除以一個標量。
void swap (banded_matrix &m) 交換帶狀矩陣的內容。
void insert (size_type i, size_type j, const_reference t) t插入到第i-th行 第j-th列。
void erase (size_type i, size_type j) 刪除第i-th行第j-th列的元素。
void clear () 清除矩陣。
const_iterator1 begin1 () const 返回指向banded_matrix開始處的const_iterator1
const_iterator1 end1 () const 返回指向banded_matrix終止處的const_iterator1
iterator1 begin1 () 返回指向banded_matrix開始處的iterator1
iterator1 end1 () 返回指向banded_matrix終止處的iterator1
const_iterator2 begin2 () const 返回指向banded_matrix開始處的const_iterator2
const_iterator2 end2 () const 返回指向banded_matrix終止處的const_iterator2
iterator2 begin2 () 返回指向banded_matrix開始處的iterator2
iterator2 end2 () 返回指向banded_matrix終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉的(reversed)banded_matrix開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉的(reversed)banded_matrix終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉的(reversed)banded_matrix開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉的(reversed)banded_matrix終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉的(reversed)banded_matrix開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉的(reversed)banded_matrix終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉的(reversed)banded_matrix開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉的(reversed)banded_matrix終止處的reverse_iterator2

注意

[1] 對於存儲組織所支持的參數是row_majorcolumn_major

[2] 對於適配數組(adapted array)所支持的參數是unbounded_array<T> , bounded_array<T>std::vector<T>

帶狀適配器(Banded Adaptor)

說明

模板類banded_adaptor<M> 是一個其它的矩陣的帶狀矩陣適配器( banded matrix adaptor )。

例子

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

int main () {
    using namespace boost::numeric::ublas;
    matrix<double> m (3, 3);
    banded_adaptor<matrix<double> > ba (m, 1, 1);
    for (signed i = 0; i < signed (ba.size1 ()); ++ i)
        for (signed j = std::max (i - 1, 0); j < std::min (i + 2, signed (ba.size2 ())); ++ j)
            ba (i, j) = 3 * i + j;
    std::cout << ba << std::endl;
}

定義

定義在頭文件 banded.hpp 中。

模板參數

參數 說明 缺省值
M 適配矩陣(adapted matrix)的類型。

模型(Model of)

矩陣表達式(Matrix Expression)

類型要求(Type requirements)

沒有,除了由矩陣表達式(Matrix Expression) 所施加的類型要求。

公有基類(Public base classes)

matrix_expression<banded_adaptor<M> >

成員

成員 說明
banded_adaptor (matrix_type &data, size_type lower = 0, size_type upper = 0) 分配一個在主對角線周圍有(lower + 1 + upper)條對角線的banded_adaptor
banded_adaptor (const banded_adaptor &m) 拷貝構造函數。
template<class AE>
banded_adaptor (const matrix_expression<AE> &ae)
擴展拷貝構造函數。
size_type size1 () const 返回行數。
size_type size2 () const 返回列數。
size_type lower () const 返回在主對角線之下的對角線數。
size_type upper () const 返回在主對角線之上的對角線數。
const_reference operator () (size_type i, size_type j) const 返回指向第i行第j列的元素的const引用。
reference operator () (size_type i, size_type j) 返回指向第i行第j列的元素的引用。
banded_adaptor &operator = (const banded_adaptor &m) 賦值運算符。
banded_adaptor &assign_temporary (banded_adaptor &m) 賦值給一個臨時變量。可能會改變帶狀矩陣 m
template<class AE>
banded_adaptor &operator = (const matrix_expression<AE> &ae)
擴展賦值運算符。
template<class AE>
banded_adaptor &assign (const matrix_expression<AE> &ae)
將一個矩陣表達式賦給一個帶狀適配器(banded adaptor)。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
banded_adaptor &operator += (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。將一個矩陣表達式加到一個帶狀矩陣中。
template<class AE>
banded_adaptor &plus_assign (const matrix_expression<AE> &ae)
將一個矩陣表達式加到一個帶狀矩陣中。賦值的左邊和右邊應當是相互獨立的。
template<class AE>
banded_adaptor &operator -= (const matrix_expression<AE> &ae)
一個運算賦值運算符(computed assignment operator)。從帶狀矩陣中減去一個矩陣表達式。
template<class AE>
banded_adaptor &minus_assign (const matrix_expression<AE> &ae)
從帶狀適配器(banded adaptor)中減去一個矩陣表達式。賦值的左邊和右邊應當是相互獨立的。
template<class AT>
banded_adaptor &operator *= (const AT &at)
一個運算賦值運算符(computed assignment operator)。 將一個帶狀適配器(banded adaptor)乘以一個標量。
template<class AT>
banded_adaptor &operator /= (const AT &at)
一個運算賦值運算符(computed assignment operator)。 將一個帶狀適配器(banded adaptor)除以一個標量。
void swap (banded_adaptor &m) 交換帶狀適配器的內容。
const_iterator1 begin1 () const 返回指向banded_adaptor開始處的const_iterator1
const_iterator1 end1 () const 返回指向banded_adaptor終止處的const_iterator1
iterator1 begin1 () 返回指向banded_adaptor開始處的iterator1
iterator1 end1 () 返回指向banded_adaptor終止處的iterator1
const_iterator2 begin2 () const 返回指向banded_adaptor開始處的const_iterator2
const_iterator2 end2 () const 返回指向banded_adaptor終止處的const_iterator2
iterator2 begin2 () 返回指向banded_adaptor開始處的iterator2
iterator2 end2 () 返回指向banded_adaptor終止處的iterator2
const_reverse_iterator1 rbegin1 () const 返回指向反轉的(reversed)banded_adaptor開始處的const_reverse_iterator1
const_reverse_iterator1 rend1 () const 返回指向反轉的(reversed)banded_adaptor終止處的const_reverse_iterator1
reverse_iterator1 rbegin1 () 返回指向反轉的(reversed)banded_adaptor開始處的reverse_iterator1
reverse_iterator1 rend1 () 返回指向反轉的(reversed)banded_adaptor終止處的reverse_iterator1
const_reverse_iterator2 rbegin2 () const 返回指向反轉的(reversed)banded_adaptor開始處的const_reverse_iterator2
const_reverse_iterator2 rend2 () const 返回指向反轉的(reversed)banded_adaptor終止處的const_reverse_iterator2
reverse_iterator2 rbegin2 () 返回指向反轉的(reversed)banded_adaptor開始處的reverse_iterator2
reverse_iterator2 rend2 () 返回指向反轉的(reversed)banded_adaptor終止處的reverse_iterator2

Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt).