MATLAB 与 C 语言的混合编程

时间:2022-07-26
本文章向大家介绍MATLAB 与 C 语言的混合编程,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言

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++程序,换句话说,有无格式上的不同?

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

#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一样,源程序改一次就要编译一次,否则就是按照上一次编译的程序来运行

运行指令为

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

希望对您有所帮助~