前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MATLAB 与 C 语言的混合编程

MATLAB 与 C 语言的混合编程

作者头像
glm233
发布2020-09-28 11:05:42
3.5K0
发布2020-09-28 11:05:42
举报

前言

MATLAB 与 C 语言的接口规范

MATLAB 与 C 语言的接口采用称为 MEX 的动态链接方式进行。MEX 文件是由 C/C++ 源程序经过编 译生成的 MATLAB 动态链

接子程序 ,它的作用十分类似于MATLAB的内建函数 ,可由 MATLAB 方便地调用。

简单而言MEX就相当于是链接C/C++与MATLAB的一个关键程序

一、首先,我们需要有自己的编程环境,我的是matlabR2019b+VS2017编译器。在这里我想说一个问题如果你是先有VS后下载matlab的话没有问题,但是如果你是下载了matlab之后再安装的VS,对不起,很有可能运行不了mex -setup这条语句,那就只能安装MinGW-w64 C/C++编译器

安装之后重启Matlab,进入之后在命令行中输入mex -setup安装编译器,这时默认是C的编译环境。可选择mex -setup C++的选

项,如果成功的话界面是这样显示的:

之后选择

当然是接着选择C++

OK至此为止,全部配置环境安装成功~

还有一个问题:我在MATLAB里如何编写C++程序,换句话说,有无格式上的不同?

当然,下面给出一个模板(输出结果只有一个参数)

代码语言:javascript
复制
#include "mex.h"

void mexFunction (int nlhs,mxArray *plhs[],int nrhs,const mxArray * prhs[])
{
    double *a;
    double b,c;
    plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL);
    a=mxGetPr(plhs[0]);//
    b=*(mxGetPr(prhs[0]));
    c=*(mxGetPr(prhs[1]));
}

这个只是必须要加入到我们编写的程序中的需要的头文件我们可以自己加,比如iostream、cmath等等

然后要注意,这里编写程序比较特殊

没有主函数且你所写的函数都必须放在这个mexFunction之前,其他的都和C/C++编程语法几乎一样,那这个mexFunction我们

可以理解成matlab执行C/C++代码时的一个关键组件、必须要有的,它有四个参数,nlhs是输出参数个数,nrhs是输入参数个

数,mxArray是可执行matlab程序的矩阵类型,在这里是一个类似数组的结构

举个例子,你要算a+b返回c=a+b结果,那么c=plhs[0],则必须要有plhs[0]=mxCreateDoubleMatrix(1,1,mxREAL)这行初始化

前两个参数是返回矩阵的行列这样说就很明白了

同样,我们需要用mxGetpr获取prls矩阵元素的地址来获得输入参数,熟悉C系列语法的应该不难理解上面这个模板

最后要说的是这个和C系列下的IDE一样,源程序改一次就要编译一次,否则就是按照上一次编译的程序来运行

运行指令为

代码语言:javascript
复制
mex xxx.cpp//c++文件
mex xxx.c//c文件
//举个例子,比方说我写了test.cpp文件最后要运行的时候只需要mex test.cpp之后
//test(a1,a2....)这样就可以调用了,其中a1,a2...是你程序输入参数

希望对您有所帮助~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档