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...是你程序输入参数
希望对您有所帮助~
- S-shortcodes:WordPress短代码形式美化框插件下载
- 服务器同时存在1.1和2.0程序注意事项
- Flash/Flex学习笔记(44):万有引力与粒子系统
- 代码重写WordPress网页标题为“原网页标题|网站名”的形式
- 未来10年21个核心工作岗位
- Asp.net 2.0 WebPart使用经验点滴
- 使用LinqToExcel读取Excel
- 时代的需要:越来越多的Java工程师开始转向hadoop?
- 如何结合IbatisNet的LIST遍历实现模糊查询
- Flash/Flex学习笔记(41):碰撞检测
- [.NET网格计算框架] Alchemi
- 修改WordPress登陆文件名wp-login.php,防密码被暴力破解
- NDoc - .NET 代码文档生成器
- Mono P/Invoke :DLLImport
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 移动端返回顶部
- 移动端轮播图
- 移动端触屏事件
- 筋头云案例
- 线上问题排查思路、工具小结
- 返回顶部案例
- 机器视觉 | 光源照明综述(详细版)
- 网页轮播图案例
- Angular单元测试ComponentFixture的实例化过程明细
- 如何在Chrome调试器里检查嵌套Observable对象
- Angular 指令ngTemplateOutlet的运行原理单步调试
- 跳出源码地狱,Spring巧用三级缓存解决循环依赖-原理篇
- Angular NgTemplateOutlet的一个例子
- 手把手教你自制基于TencentOS Tiny的智能甲醛监测仪
- ASP.NET Core 使用 AutoFac 注入 DbContext