一组MATLAB和 C++数据交换类的设计

本文介绍了如何设计MATLAB和C++之间的数据交换类,包括MATLAB引擎的调用、数据接口设计以及具体实例。通过封装MATLAB的C API,实现了不同类型数据(如矩阵、阵列、字符串等)的封装类,简化了MATLAB和C++之间的数据交互。文章还提供了示例代码,展示了如何使用这些类进行数据操作和计算。
摘要由CSDN通过智能技术生成

 一组MATLAB和 C++数据交换类的设计
 

南京航空航天大学 san  email visualsan@yahoo.cn

 

总体结构图

总体结构图

本文将针对如何进行 MATLAB C++ 交互进行探讨,编程环境问为 matlab2009 VC6.0 。具体如何设置编程环境请参考 help 。内容总体分三部分: 1.matlab 引擎调用类封装。 2. 数据接口类设计,包括 mat 类型文件操作类设计。 3. 具体举几个实例。所有源代码包括例子,在我的空间中可以找到,有参考需要的朋友可以关注一下。

MATLAB 引擎总体结构分成两部分:数据交换和后台计算服务,由 matlab 命令控制。数据交换接口负责数据输入和数据输出。数据输入将计算说需要的变量导入到计算引擎中;数据输出接口则将计算结果提取出来进一步处理,典型的matlab应用是首先向matlab 传递参数、然后进行复杂的运算,最后提取感兴趣的结果。利用matlab 强大的计算能力以及C++的灵活性可发挥各种功能的极限,从而提高工作效率。关于matlab 和c++的相互调用的文章很多,但是在两者之间进行数据传递是一个比较麻烦的事情,要求程序员对MATLAB 的C API相当熟悉,所以非常不便。我接触MATLAB 和C++有几年了,相关书籍和文件教程让我受益匪浅,闲暇之余就总结了一下自己所学的知识,用面向对象方法开发了matlab和c++交互的类,写出来探讨一下。

 

计算引擎分为全局引擎和局部引擎。全局引擎只有一个,一旦启动全局引擎,则所有的计算结果和变量都是全局共享的。局部引擎是独立于线程的一个计算引擎,它的数据是局部拥有的,可以启动任意多的局部引擎,取决于计算机配置。启动一个局部引擎相当于开启一个独立的 MATLAB 线程,由于启动 MATLAB 是一个很耗时间的过程,因此应该尽量减少局部引擎的启动数量。引擎控制有类 CMatlabEngine 控制。 CMatlabEngine 的结构如下:

CMatlabEngine类结构图

bSingleUse=1 表示启动局部引擎, bSingleUse=0 表示启动全局引擎,全局引擎在第一次调用时打开 MATLAB ,以后每调用一次 OpenEngine 打开全局 MATLAB ,则引用计数加一;调用一次 closeEngine 引用计数减一。当引用计数为 0 时,表示当前没有程序对全局 MATLAB 进行调用,此时将自动关闭 MATLAB

调用 void SetEngineVisible(BOOL bVisible) 将决定是否显示 MATLAB 的窗口界面。函数 void PutVar(char *name,MatlabData* d) 将向 MATLAB 空间中添加一个自定义变量,其中 name 为变量名称, d 为变量内容,若该变量已经存在,则调用该函数将覆盖已存在变量值。函数 BOOL GetVar(char *name,MatlabData** d) 将从 MATLAB 空间中提取一个变量,其中 name 为变量名称, d 为输出指向内容指针的指针,若该变量不存在,则返回 FALSE

void EvalString(char* matlabString) 可以和计算引擎进行命令交互, matlabString 为命令,和常规使用 MATLAB 软件所进行的输入一致。一旦调用某个命令, MATLAB 将有反馈输出,可能是计算结果,也可能是错误信息,这些信息可以通过调用 const char* GetOutPut() 来获取。

 

2. 数据类型接口设计

   所有 MATLAB的 C API的数据类型是 mxArray MATLAB 提供了一组 C  API 来进行数据操作。 mxArray 是一种包含多种类型的数据,可以是数值,字符, cell 或者是结构体;数据类型可以是标量,矩阵,STRUCT或者是 Array

mxArray数据类型

针对实际应用,将常用的数据类型进行接口设计。数据结构可分为标量,矩阵和阵列。数据类型有双精度浮点数,单精度浮点数, 32 位整数, 64 位整数,字符串,布尔型。

 

如图所示,将数据结构分为三种,分别是:标量、矩阵和阵列。将数据类型分位四种:

浮点数、布尔型,整形和字符串。类继承关系图如下

ImxArray及其子类类继承关系图

 

ImxAray 为借口类,派生出矩阵 xMatrix<T> 和阵列 xAray<T> ,其中 T 位具体类型,采用模板技术,再将类型 T 具体化位实际数据类型如 int,double 等,可以得到相应的矩阵类和阵

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值