您的位置:首页 > 编程语言 > MATLAB

MATLAB和C++数据交类实例---矩阵操作

2011-03-10 10:25 573 查看
模板矩阵类xMatrix<T>定义了matlab矩阵的接口。

由xMatrix<T>模板类具化的类有xMatrixDouble,xMatrixFloat,xMatrixInt,xMatrixUInt,

xMatrixInt64,xMatrixUInt64,xMatrixBool,xMatrixChar。

下面将结合实例演示如何使用矩阵,以
xMatrixDouble为例。

1.从matlab中读取矩阵

#include <iostream.h>
#include "xMatrix.h"
#include "MatlabEngine.h"
void main()
{
printf("matlab&c++ /n      /
visualsan@yahoo.cn  NUAA/
2011/n------------------------/n");
//matlab 引擎
CMatlabEngine  g;
//打开
cout<<"Open Matlab Engine..../n";
if( g.OpenEngine() )
{
//1.从matlab中获取一个5X5的随机矩阵
char tmp[200];
//调用rand生成随机矩阵
strcpy(tmp,"rang_natrix=rand(5);");
g.EvalString(tmp);
mxWrap  rang_natrix;
//获取名称为rang_natrix的矩阵
g.GetVar("rang_natrix",&rang_natrix);
xMatrixDouble *pd=(xMatrixDouble*)rang_natrix.GetArrayInterface();
//打印矩阵
for (int i=0;i<pd->GetR();i++)
{
for (int j=0;j<pd->GetC();j++)
{
cout<<pd->GetRealAt(i,j)<<" ";
}
cout<<endl;
}
//关闭引擎
g.CloseEngine();
}

}




2.向matlab中写入矩阵

#include <iostream.h>
#include "xMatrix.h"
#include "MatlabEngine.h"
void main()
{
printf("matlab&c++ /n      /
visualsan@yahoo.cn  NUAA/
2011/n------------------------/n");
//matlab 引擎
CMatlabEngine  g;
//打开
cout<<"Open Matlab Engine..../n";
if( g.OpenEngine() )
{
//1.从matlab中获取一个5X5的随机矩阵
char tmp[200];

//准备矩阵5X5
double  mr[]=
{
1.2,4.4,5.5,6.6,7.7,
1.12,1.44,15.5,1.66,1.77,
21.2,2.44,2.55,2.66,2.77,
3.12,3.44,3.55,3.66,3.77,
4.12,4.44,4.55,4.66,4.77
};
//转换为matlab格式,按列存储
xMatrixDouble::C2Mat(mr,5,5,mr);
xMatrixDouble  xd(5,5,mr);
//写入矩阵
g.PutVar("text_matrix",xd.GetArray());
//计算矩阵的逆矩阵
g.EvalString("text_matrix_inv=inv(text_matrix);");
mxWrap  text_matrix;
mxWrap  text_matrix_inv;
//获取名称为text_matrix的矩阵
g.GetVar("text_matrix",&text_matrix);
xMatrixDouble *pd=(xMatrixDouble*)text_matrix.GetArrayInterface();
//获取名称为text_matrix_inv的逆矩阵
g.GetVar("text_matrix_inv",&text_matrix_inv);
xMatrixDouble *pd_inv=(xMatrixDouble*)text_matrix_inv.GetArrayInterface();
//打印矩阵
cout<<"原矩阵:/n";
for (int i=0;i<xd.GetR();i++)
{
for (int j=0;j<xd.GetC();j++)
{
cout<<xd.GetRealAt(i,j)<<" ";
}
cout<<endl;
}
cout<<"从matlab中读取的矩阵:/n";
for ( i=0;i<pd->GetR();i++)
{
for (int j=0;j<pd->GetC();j++)
{
cout<<pd->GetRealAt(i,j)<<" ";
}
cout<<endl;
}
cout<<"从matlab中读取的逆矩阵:/n";
for ( i=0;i<pd_inv->GetR();i++)
{
for (int j=0;j<pd_inv->GetC();j++)
{
cout<<pd_inv->GetRealAt(i,j)<<" ";
}
cout<<endl;
}

//关闭引擎
g.CloseEngine();
}

}




SAN NUAA 2011.3.9
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐