c++未定义标识符怎么解决_MATLAB之C/C++混合编程

与MATLAB相比,C/C++的执行效率更高,占用内存更小,如果能够将占用大量时间的核心代码用C/C++实现,编译成动态可执行文件后,在MATLAB中直接调用,就能够提高MATLAB程序的运行速度。

不同版本的MATLAB支持的C/C++编译器不同,具体可以参考官网链接。下面的代码MATLAB版本为R2018b,使用的C/C++编译器为Visual Studio 2015 Professional。

MATLAB为C/C++/C++ 11/Fortan/Java/.NET/Python语言留有API接口,

External Language Interfaces​ww2.mathworks.cn

针对C/C++,首先,安装编译器

mex 

也可以不在MATLAB中进行编译,而是在VS 2015中编译好后直接拷贝到MATLAB运行文件夹中使用,相对比较复杂,但可以进行调试,具体参考之间的文章

易夕:MATLAB + VS 2015混合编程并调试​zhuanlan.zhihu.com
8bb327f8b77d78e679568aa792c49460.png

关于如何编写C/C++的MEX函数,参考官方文档,

Calling MATLAB from C​ww2.mathworks.cn

下面用一个简单的例子说明C/C++的威力,设有一个有序数组,数组中有一些重复的值,返回去重后的结果。MATLAB 中可以用uniqu函数实现,对于长度为1e9的int32数组,去重需要11.527秒。

A 

如果用C实现,采用原地算法,mexFunction代码如下

include "

保存为removeDuplicates.cpp,在MATLAB中执行以下命令进行编译

mex 

当前文件夹会生成一个removeDuplicates.mexw64文件。现在,可以将removeDuplicates在MATLAB中当作一个函数使用,对长度为1e9的int32数组,去重仅需要2.014秒,相当于原来六分之一的时间。

A 

其他更多提高MATLAB运行速度的方法,参考

易夕:如何提高MATLAB程序运行速度​zhuanlan.zhihu.com
易夕:MATLAB Tricks 专栏目录​zhuanlan.zhihu.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值