C++和MATLAB的混合编程(1)
来源:互联网 发布:土耳其进行曲 知乎 编辑:程序博客网 时间:2024/05/29 16:37
因为需要使用滤波算法对数据进行滤波处理,自己对算法方面又不是很熟,通过查找了解到MATLAB中各种算法都已经很完善了,所以就想着学习一下使用MATLAB中的算法,后来也是各种百度,但是一直没有找到一个很好的,很完善的解决方案,最后通过多种了解查看,总算弄出一个可用的,这里总结一下在MATLAB混编遇到的问题,还有一些自己的认知。也给想要使用MATLAB混编的朋友一些大体的可行方案吧!
首先,安装一个MATLAB是必须的,在这里说明一下(据说使用MATLAB6.5及以下的版本,不会出现在没有MATLAB的电脑上无法使用自己软件的问题,本人由于时间问题没有尝试的使用,使用后如果可以解决在其他电脑使用问题,本人会在后面更新的时候说明)
这里介绍两种使用MATLAB的方法,先介绍一下本人使用的方法:
一、直接动态调用MATLAB库函数
1、安装MATLAB
2、在vs中创建工程,然后设置工程属性
这是对依赖库的设置等
2、可以在项目中进行MATLAB的函数使用了
在使用MATLAB的地方,添加头文件#include “engine.h”,
在使用的部分,对MATLAB进行打开引擎操作:
Engine *eg;if(!(eg = engOpen(NULL))) MessageBoxA(NULL, "can't start MATLAB engine","MATLAB engine",MB_OK);
创建MATLAB矩阵内存块:
mxArray *imA;imA=mxCreateDoubleMatrix(20,20,mxREAL);
设置,将自己的数据拷贝到矩阵中,并在MATLAB中创建对应的变量:
double A[20][20]memcpy((void *)mxGetPr(imA),(void *)A,sizeof(A));engPutVariable(eg,"im",imA);
在MATLAB中进行计算:
engEvalString(eg, "Wn=[0.5*2 35*2]/1000");engEvalString(eg, "[k,l]=butter(1,Wn)");engEvalString(eg, "im2=filtfilt(k,l,im)");
得到MATLAB中的数据,并拷贝到C++中的变量中:
imC =engGetVariable(eg,"im2");double C[20][20];memcpy((void *)C,(void *)mxGetPr(imC),sizeof(mxGetPr(imC))*20*20);
释放矩阵内存:
mxDestroyArray(imA);
关闭引擎:
engClose(eg);
然后这个方法有一个问题,就是需要将用到的MATLAB中的dll文件拷贝到生成的版本中,dll文件在MATLAB路径的:
D:\Matlab\R2015b\bin\win64
然后就算完成。
二、生成dll文件在C++中调用
1、在MATLAB中创建m文件,使用MATLAB语句生成MATLAB可执行语句
2、在命令中使用:mcc -W lib:lib(m文件名) 文件.m -T link:lib ,将生成动态链接库,然后在C++中就可以调用
3、在使用的时候也需要设置MATLAB链接库
暂时还没有发现,使用引擎和动态库,在C++中使用有什么大的不同,希望,其他有更好方法的,可以在下面评论,不会的也可以参考使用引擎的方法,实现自己的编程目的。本人也会不断研究,不断提出新的方法。
- Matlab和C混合编程
- c和matlab混合编程
- C和MATLAB混合编程
- C++和MATLAB的混合编程(1)
- Matlab和C混合编程的一个靠谱思路
- Linux下C和matlab混合编程学习(1)
- C++/Matlab混合编程(vs2010和matlabR2014a)
- matlab 和c混合编程-------------------基础
- Matlab 和 C/C++混合编程
- matlab和C/C++混合编程--Mex
- matlab和C/C++混合编程--Mex
- Matlab和C混合编程举例
- 小记Matlab和C混合编程
- matlab和C/C++混合编程--Mex
- matlab和C/C++混合编程--Mex
- MATLAB和C语言混合编程问题
- Matlab C混合编程
- matlab C混合编程
- QT学习笔记(3)布局管理器
- cmd 中net start mysql 遇到的问题。
- 实现I/0复用服务器端(select函数)
- 如何向妻子解释OOD
- 【bzoj1211】 [HNOI2004]树的计数
- C++和MATLAB的混合编程(1)
- BZOJ1296: [SCOI2009]粉刷匠
- StarUML的安装
- 【知识库】--spring aop 动态代理--inner private protected 方法失效(212)
- 电脑数据存放
- 简单的单例模式
- 1、AltiumDesigner14.3.X系列软件安装及破解过程
- hdoj 1031 Design T-Shirt(排序)
- LeetCode-47.Permutations II