c和matlab混合编程

简要回顾一下MATLAB程序编译所经历的大致过程。通过分析MATLAB程序编译发展的历程可以更加明了为什么需要MATLAB编译器、在什么情况下选择MATLAB编译器、应当如何最大限度利用MATLAB编译器?

 

MATLAB出现以后,以其特有的简单方便、功能强大很快拥有了众多的使用者,但是MATLAB也存在一些问题,比如循环执行速度慢、开发和发布应用软件不方便等。这时候,人们自然就会想到是不是可以把MATLAB程序通过编译器编译为C/C++语言以方便其他程序调用。这时候MATLAB编译器需要解决的问题主要有两个:

Ø  MATLAB核心库调用的接口函数。

Ø  将用户开发的程序编译为C/C++程序。

Matcom可以将MATLAB程序完全编译为C/C++文件,并且提供一套完整的矩阵运算库。

 

MATLABC/C++混合程序设计思路没有发生本质的变化

(一)  MEX文件:在MATLAB开发环境中调用C/C++等外部程序需要借助编译器将C/C++代码编译为MEX文件以后才能实现,其中MEX文件包含有MATLAB解释器可以动态装载和执行的动态链接模块。在windows平台下,MEX文件是以动态链接库的形式存在(根据MATLAB版本不同,扩展名为*.dll ,*.mexw32 ,*mexw64),通过用C/C++语言编写代码,然后通过Matlab编译器将其编译为MEX文件可以完成如下功能。

a)       加速程序的执行速度:将MATLAB程序中运行效率不高的代码(如循环)用C/C++来实现

b)       利用MATLAB作为C/C++语言开发的调试环境:MATLAB在进行数据显示是非常方便的,C/C++语言编写的数值计算程序在其他开发环境中调试时数据显示不方便,因而可以通过MEX文件这种方式在Matlab环境下进行调试。尤其是有大量数据处理的情况下,用MATLAB观察其中间结果是非常方便的。

c)        扩展MATLAB的功能:MATLAB具有强大的矩阵运算能力并且拥有丰富的工具箱,但是在有些方面比较薄弱,比如硬件设备接口操作、图形化程序设计等方面,用户可以利用MEX文件利用C/C++语言扩展Matlab的薄弱环节,以满足设计的需求。

(二)  用户在C/C++调用MATLAB程序可以选择调用MATLAB程序编译后的动态链接库或MATLAB程序编译后的COM组件。这两种方法的执行效率是相同的,动态链接库实现起来比较简单;COM组件实现起来比较复杂,代码的可维护性好,除此之外,C/C++可以通过MATLAB引擎直接执行MATLAB程序,但该方法不能脱离MATLAB环境执行。

(三)  MATLAB C++数学库是MATLAB提供的一组封装好的矩阵运算数学库,其使用方法和MATLAB环境中的编写方法十分类似,如果用户用visual C++实现用户界面,有希望寻找一组高效的矩阵运算数学库的话,那么MATLAB  c++数学库是一个不错的选择。

无论使用哪种方法,MATLAB的数学结构与C/C++的数学结构之间的相互访问和转换都是混合编程的关键。

评价一下CC++的各自特点,如果一个程序既需要大量的运算,又要有一个好的用户界面,还需要与其他软件大量交流,应该怎样选择合适的语言。

C是一种结构化语言,重点在于算法和数据结构,C程序的设计首先考虑的是如何通过一个过程(面向过程),对输入运算处理得到输出。

C++首先考虑的是如何构造一个对象模型,让这个对象模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出。

对大规模数值运算,C/C++Java.NET 之间没有明显的差异,不过如果涉及向量计算、矩阵运算,可以使用FortranMATLAB编写计算组件(如COM)。

大规模用户界面相关的软件可以考虑使用.NET进行开发,而且.NETCOM之间的互操作十分容易,同时.NET对数据的访问的支持也相当好。

COM组件(Componet Object Model)概述:是以组件为发布单元的对象模型,由于COM是建立在二进制级别上的规范,所以组件对象之间的交互规范不依赖于任何特定的开发语言。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值