- 积分
- 0
- 注册时间
- 2008-5-9
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 messenger 于 2010-1-5 22:12 编辑
最近使用c++(vs2008)与matlab2009b采用dll形式进行混编。
c++调用matlab生成的dll。
怎么也找不到c++与matlab dll的稀疏矩阵的接口 。目前,我只能用mwarray传一个实矩阵给matlab 的dll,然后在dll里面通过sparse()生成稀疏矩阵。
以前用matlab6.5 的c++库时,直接就可以通过三元组生成稀疏矩阵,
怎么matlab2009里面没有了吗?
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
已经解决了,就是用 NewSparse(mwSize data_size, const mwIndex* rowindex, const mwIndex* colindex, mxDouble* rData, mxDouble *iData, mwSize num_rows, mwSize num_cols, mwIndex nzmax, mxClassID id, mxComplexity cplx) ;
matlab里面的稀疏矩阵是采用三元组来表示的,就是说表示一个稀疏矩阵需要三个向量。
分别是所在行数、列数、值。
比如表示稀疏矩阵[ 1 0 1;0 1 0;1 0 0]
就得用三个向量 [1 1 2 3] ,[1 3 2 1] and [1 1 1 1]
在c++里,这三个向量都可以用数组表示。
下面说一下NewSparse 函数各个参数的意义
第一个参数:int 型,数据的个数,就是索引数组的大小
第二个参数:用int*即int型数组强制转换成(mwIndex *),表示行索引
第三个参数:类型同上,表示列索
第四个参数:double *型,表示数据的实部
第五个参数:double*型,表示数据的虚部,不是复数的话,此项填NULL
第六个参数:int型,表示总的行数,也就是行索引数组里的最大值
第七个参数: int 型,表示总的列数,也就是列索引最大值
第八个参数:int型,表示稀疏矩阵非零元的个数,可能比第一个参数小,因为索引可能会重复,matlab对重复索引是把值相加。
第九个参数:数据类型,一般是double型就填mxDOUBLE_CLASS
第十个参数:实数或复数的标识,如果实数,填 mxREAL
下面再贴一下我使用稀疏矩阵的例子
int nSize=this->Size();
int * pRowIndex=new int[nSize];
int * pColumnIndex=new int[nSize];
double * pData=new double[nSize];
... .... ...数组赋值省略
mwArray spMatrix=mwArray::NewSparse(nSize,(mwIndex *)pRowIndex,(mwIndex *)pColumnIndex,pData,NULL,Cal_nColumns(),Cal_nColumns(),nSize,mxDOUBLE_CLASS,mxREAL); |
评分
-
2
查看全部评分
-
|