MATLAB调用C语言程序

您所在的位置:网站首页 Matlab怎么安装smoothdata MATLAB调用C语言程序

MATLAB调用C语言程序

2024-07-02 18:16| 来源: 网络整理| 查看: 265

MATLAB在数值运算、图像处理、实时仿真方面具有很大得优势,但它得运行速度远远不及C语言或C++,为了解决这一问题,MATLAB提供了和C/C++混合编程的接口,以此讲MATLAB对运算、图形处理得优点和c语言运行速度快得特点想结合。 混合编程的一般步骤:MATLAB 函数使用MATLAB格式数据 —>C/C++程序首先解析MATLAB数据 —>解析后运行C/C++程序,得到结果 —>C/C++程序最后要把上述结果数据打包成MATLAB格式输出给MATLAB中的主调程序。MATLAB是不能直接调用c语言的函数的,需要将c语言代码编译乘mex文件才可以调用,其中会用到一些辅助函数,本文以一个加法的例子介绍一下MATLAB与C混合编程的方法。

第一步 创建一个C文件

文件命名为add.c。 在这里插入图片描述

第二步 添加头文件“mex.h”

这一项是必须的,mex.h中包含了编译中用到的接口变量,函数等。 在这里插入图片描述

第三步 定义c语言的功能函数 void add(double *x,double *y,double *z) { *z=*x+*y; }

这里我们全部用指针的方式传递输入输出参数,实现z=x+y的功能。

第四步 定义MexFunction函数

这也是最关键的一步,MexFunction是c语言和MATLAB的接口函数,完成文章开头所叙述的操作。

void mexFunction( int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[]) { double *x, *y; /*被加数和加数*/ double *z; /*和*/ ///判断输入输出参数的维度 if(nrhs!=2) { mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs","Two inputs required."); } if(nlhs!=1) { mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs","One outputs required."); } x=mxGetPr(prhs[0]);//获取第一个输入参数的指针 y=mxGetPr(prhs[1]); //获取第二个输入参数的指针 plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL); //创建输出矩阵 z = mxGetPr(plhs[0]);//获取第一个输出参数的指针 add(x,y,z);调用add函数 }

代码中有详细的注释,这里对四个输入参数简单的介绍: nlhs说明调用语句左手面(lhs-left hand side)有几个变量,输出数据个数 nrhs说明调用语句右手面(rhs-right hand side)有几个变量,输入数据个数。 *plhs是一个数组,其内容为指针,该指针指向数据类型mxArray。代表左手边数据,也就是输出数据。 *prhs同上,代表输入数据

第五步 编译

需要提前安装好MinGW-w64工具箱,一般安装MATLAB的时候默认是不安装的,安装方法很简单,主页-附加功能->搜索“MinGW-w64”。 在这里插入图片描述 搜索MinGW-w64 在这里插入图片描述 点进去之后在右侧回看到下载和下载并安装,直接下载安装就可以了。需要注意的是这个附加功能仅支持2017b以上的版本。 在这里插入图片描述 然后就可以在命令行编译,直接输入以下命令即可: mex add.c 编译成功后会在当前文件夹生成一个mexw64文件(32位系统的话就是mexw32)。 在这里插入图片描述

第六步 MATLAB调用

直接在脚本文件或者命令行调用即可。 a=add(1,2); 要保证输入有两个参数,输出一个参数,这里不能省略输出参数,因为我们在MexFunction中编写了判断输入输出参数的代码,如果没有输出参数的话,就会报错: 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3