请讨论矩阵类

swnuwangyun 2002-12-28 03:19:32
希望大家对使用模板技术设计矩阵类进行深入的探讨
...全文
9 点赞 收藏 17
写回复
17 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
bathing 2003-01-20
你用google搜索blitz++(应该是在www.oonumerics.org,记不太清楚了),一个非常好的矩阵类,其次是mtl,另外到www.netlib.org看看c++的lapack++和它的后继TNT
回复
xuejm 2003-01-20
真厉害!不用自己写吧。如果什么都自己写,那么我们什么时候实现小康啊!
已经有人写好了,叫做MTL(Matrix Template Library)。可以直接用的。
回复
blas 2003-01-14
临时对象?Bjarne Stroustrup 的书中不是讲到过如何消除的吗!
The C++ Programming Language--numeric
回复
嵌云阁主 2003-01-13
做乘法或其它的算法可以参考lapack中的某些函数。
http://www.netlib.org/可以下载。

要像matlab那个灵活不是做不到,但是很难兼顾效率。
我做了一个类,可以实现这样的形式:
TMMatrix<int> v1, v2;
v1[_r(2, 30)][_r(1, 20)] = v2[_r()][_r()];
但是其间产生了8个临时对象,效率过低,不知有哪位高手能够指教?
回复
blas 2003-01-08
谁能写个程序使两个1000*1000矩阵的乘法的运算时间不超过matlab的一倍
回复
majiangping 2003-01-05
MTL是什么?
回复
suncfboy 2003-01-05
我用的是《c++程序设计语言(特别版)》中的矩阵类的例子。
然后作了扩充和修改。
目标是像matlab矩阵类一样灵活。
现在工程正在进行,如果有兴趣,大家一起探讨。
回复
chaisave 2003-01-04
我也用过MTL,挺好使的。
不过编译前要先改一下它的源码,不知现在的版本要不要改。
回复
liu_feng_fly 2003-01-03
直接使用stl不好吗?或者,可以借鉴stl::valarray的实现,做一个更好的?
回复
lak47 2003-01-03
类Matrix中我想应有这样几个函数
void identity();
template<typename T1,int R1,int C1>
Matrix(const Matrix<T1,R1,C1>& );

template<typename T1,int R1,int C1>
Matrix& opreator(const Matrix<T1,R1,C1>& );

Matrix* invert();//转置
还应重载乘法操作符
回复
lak47 2003-01-03
inner类_Row中这样定义
class _Row
{
public:
template<typename _T1>
_Row operator +(_T1 _x)const;
_Row operator +(const _Row& _x)const;
template<typename _T1>
_Row& operator +=(_T1 _x);
_Row& operator +=(const _Row& _x);

template<typename _T1>
_Row operator -(_T1 _x)const;
_Row operator -(const _Row& _x)const;
template<typename _T1>
_Row& operator -=(_T1 _x);
_Row& operator -=(const _Row& _x);

template<typename _T1>
_Row operator *(_T1 _x)const;
template<typename _T1>
_Row& operator *=(_T1 _x);

template<typename _T1>
_Row operator /(_T1 _x)const;
template<typename _T1>
_Row& operator /=(_T1 _x);

_T& operator [](int n);
const _T operator[](int n)const;
private:
_T _data[_C];
};
回复
lak47 2003-01-03
我的思路是:
template<typename _T,int _R,int _C>
class Matrix
{
public:
class _Row{
};

const _Row& operator[](int n)const;
_Row& operator[](int n);
private:
_Row _data[_R];
}
回复
kangde 2002-12-30
用MTL啊
回复
shornmao 2002-12-30
std::valarray,去看吧。
回复
lak47 2002-12-29
明天放假了,回家看看以前写的矩阵类代码再来
回复
serverclient 2002-12-29
大矩阵一般是用“十字链表”的方式来存储。
大矩阵地运算一般用分块运算的方法,或者直接调用Matlab进行计算。
其他的我也不清楚了,矩阵的运算太复杂多变,不太容易设计一个时间
空间效率都好的类吧。哪怕是用Template。
回复
Reve 2002-12-29
可行,我已经实现了,但没有优化,没时间
回复
相关推荐
发帖
工具平台和程序库
创建于2007-09-28

2.4w+

社区成员

C/C++ 工具平台和程序库
申请成为版主
帖子事件
创建了帖子
2002-12-28 03:19
社区公告
暂无公告