boost库之uBLAS线性代数(三)

boost库之uBLAS线性代数(三)
2009-11-30 14:50


矩阵 matrix <boost/numeric/ublas/matrix.hpp>

密集矩阵模板类

matrix<T, F, A>

模板参数

参数

说明

缺省值

T

存储在对象的类型。

F

描述存储组织的函数对象。

row_major

A

存储数组。

unbounded_array<std::size_t>

例子:

    matrix<double> m (3, 3);

    for (unsigned i = 0; i < m.size1 (); ++ i)

        for (unsigned j = 0; j < m.size2 (); ++ j)

            m (i, j) = 3 * i + j;

std::cout << m << std::endl;

常用函数

size_type size1()            //m,高

size_type size2()            //n,宽

array_type& date()        //返回数据

void resize(size_type size1, size_type size2, bool preserve = true)             //重新分配大小

void erase_element (size_type i, size_type j)                      //删除第i行j列元素

Identity Matrix

模板类 identity_matrix<T, ALLOC>,构造单位数组,即当i=j时值为1,其它情况为0。

例子:

matrix<double> m (3);          // 3*3的单位数组

Zero Matrix

模板类zero_matrix<T, ALLOC>,零矩阵。

Scalar Matrix

模板类zero_matrix<T,ALLOC>,标量矩阵,全1矩阵。

矩阵策略 <boost/numeric/ublas/matrix_proxy.hpp>

矩阵行

matrix_row<M>,允许定位矩阵中的一行。

例子:

       matrix<double>     m(3, 3);

       matrix_row<matrix<double> > mr(m, 1);

自由函数

  template<class M>

    matrix_row<M> row (M &data, std::size_t i);            //返回row   

矩阵列

matrix_column<M>,允许定位矩阵的一列。

例子:

       matrix<double>     m(3, 3);

       matrix_column<matrix<double> > mc(m, 1);

自由函数

    template<class M>

    matrix_column<M> column (M &data, std::size_t j);

向量切分

模板类matrix_vector_slice<M> 允许定位一个矩阵中被切分的一个子向量。

构造函数

matrix_vector_slice (matrix_type &data, const slice &s1, const slice &s2)

自由函数:

    template<class M>

    matrix_slice<M> subslice (M &data,

       M::size_type start1, M::difference_type stride1, M::size_type size1,

       M::size_type start2, M::difference_type stride2, M::size_type size2);

向量范围

模板类matrix_vector_range<M>允许定位矩阵的一个子向量。

构造函数

matrix_vector_range(matrix_type &date, const range& r1, const range& r2)

矩阵范围

模板类matrix_range<M>允许定位矩阵的子矩阵。

matrix_range(matrix_type &date, const range& r1, const range& r2)

自由函数

    template<class M>

    matrix_range<M> subrange (M &data,

       M::size_type start1, M::size_type stop1, M::size_type start2, M::size_type, stop2);

    template<class M>

    matrix_range<M> project (M &data, const range &r1, const range &r2);

矩阵表示

一元运算

       typedef template<class E> typename

matrix_unary1_traits<E, scalar_negate<typename E::value_type> >::result_type      R;

       typdef const matrix_expression<E>      A;

R operator – (A &e)                     //负号

R conj(A& e)                              //共轭

R real(A& e)                               //计算实部

R imag(A& e)                             //计算虚部

R trans(A& e)

R herm(A& e)

二元运算

R operator +

R operator –

标量运算

R operator *

R operatro /

R prod(A &e1, A &e2)

R prec_prod(A &e1, A &e2)

R solve(A &e1, A &e2, C)

/*

*     因为太麻烦了,所以连翻译的人都不想翻译了

*/

范围和切分存储 <boost/numeric/ublas/storage.hpp>

Range

指定一个范围。这个范围是从一个起始值到一个终止值的索引的序列,索引以1的步进来增加并不包含最后一个终止值。

例子:

       range r (0, 3);        // range (size_type start, size_type stop)

       r.start();

       r.size();

Slice

是范围的一般化,允许指定步进值来增加和减少。

例子:

       slice s (0, 1, 3);      //slice (size_type start, size_type stride, size_type size),stride步进



From: http://hi.baidu.com/ani_di/blog/item/2f620ed2c22b6d0a3af3cfae.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值