Matlab与Visual Studio的联合编程
来源:互联网 发布:极客学院 tensorflow 编辑:程序博客网 时间:2024/05/17 23:32
MATLAB是一门在数值运算方面非常高效的语言,编程简单可以快速实现算法。但是Matlab程序运行缓慢,尤其是循环计算更是慢的无法忍受。为此介绍一种在Matlab中调用c++程序并调试的方法,使用c++处理耗时的程序可以大大提高Matlab的效率。
一、软件环境
1、Matlab R2011b下载地址http://pan.baidu.com/share/link?shareid=294244&uk=1745344366
2、Microsoft Visual Studio 2010下载地址http://www.microsoft.com/zh-cn/download/details.aspx?id=12187
3、分别安装好软件打开Matlab 在命令行输入mex –setup设置编译器。
选择y显示已经安装的编译器。
4、选择第2项C++编译器。
最后选择y确认,等待命令结束。支持软件环境设置完成。
二、C++程序编写方法
可以直接在Matlab中编写,也可以在VS中写好了再修改到Matlab。例如在Matlab中调用Image=ham(I_gray,H)函数,ham()函数是要用C++编写的程序,作用是对I_gray灰度图像使用H矩阵进行滑动窗口操作。具体C+程序编写方法如下:
1、新建ham.cpp文件,程序比较简单直接在matlab中编辑。
2、C++的主函数必须是mexFunction(),相当于普通C/C++程序的main()函数,参数的格式也是必须固定,且必须包含mex.h头文件。
#include "mex.h"
void mexFunction(intnlhs,mxArray *plhs[],int nrhs,const mxArray*prhs[])
{
...
}
参数的具体含义
nlhs:输出参数数目
plhs:指向输出参数的指针
nrhs:输入参数数目
prhs:指向输入参数的指针
例如,本例中
prhs[0]= I_gray
prhs[1]=H
调用方式如下:
void mexFunction(intnlhs,mxArray *plhs[],int nrhs,const mxArray*prhs[])
{
double* Lp = (double*)mxGetPr(prhs[0]); //矩阵I_gray指针
int rowNum =mxGetM(prhs[0]); //获取矩阵行
int colNum =mxGetN(prhs[0]); //获取矩阵列
double* Bp = (double*)mxGetPr(prhs[1]); //矩阵H指针
plhs[0]= mxCreateDoubleMatrix(rowNum, colNum, mxREAL); //为输出变量申请空间
double *a =mxGetPr(plhs[0]); //获取输出变量指针
...
}
输出参数需要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针类型必须是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内存的申请,函数原型如下:
mxArray*mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag)
m:待申请矩阵的行数
n:待申请矩阵的列数
在mexFunction函数中可以按照常规C++程序编写调用其他函数。
3、C++程序编写完成后,在matlab命令行中使用mex ham.cpp命令编译
注意:要在VS中调试需要使用mex –g ham.cpp生成调试版本
最后生成文件
二、Matlab和VS联合调试方法
1、打开,VS 2010选择Tools /Attachto Process
2、选择MATLAB.exe进程,选择Attach。然后File/open打开刚才编辑的cpp文件,设置断点。
3、在Matlab中运行程序就能到ham.cpp的断点处,可以查看变量并调试。
三、结果对比
分别用C++和编写的函数和Matlab自带滑动窗口函数nlfilter()对比,可以看到使用C++程序运行时间只有1/100都不到,效率提升非常明显。
DataService工作室 http://blog.csdn.net/DataServiceStudio
- Matlab与Visual Studio的联合编程
- vc与matlab 联合编程
- Matlab与OpenCv联合编程
- matlab与C联合编程
- matlab与vs2008联合编程
- 浅析VC与Matlab联合编程(三)
- 浅析VC与Matlab联合编程
- 浅析VC与MATLAB联合编程
- C++与Matlab联合编程(DLL版)
- Matlab与VC6联合编程备忘录
- 精通VC与Matlab联合编程
- 32位 Matlab2013b +Visual Studio 2010联合编程配置
- Visual Studio 2015/2017 与ASP.NET CORE 联合创建具有SPA模式的Angular2模板
- Matlab与C/C++联合编程之从Matlab…
- Visual Studio 2008学习过程(之二)与MATLAB混合编程
- Matlab与modelsim的联合仿真
- OPNET与MATLAB的联合仿真方法
- ISE与MATLAB的联合使用
- HTMLParser工具类v1.0
- hdu1282回文数猜想
- PhotoShop学习心得分享------(三)通道和图层蒙版
- 《代码大全》学习笔记(3):软件创建的先决条件
- 11210 - Chinese Mahjong
- Matlab与Visual Studio的联合编程
- 关于CSDN, cnblog, iteye和51cto四个博客网站的比较与分析
- quorum failgroup disk (2)
- 模拟交通灯管理系统
- 读入未知数目的string对象
- void
- 1018. Public Bike Management
- JDBC 批量更新数据到数据库
- quorum failgroup disk (3)