MATLAB实战 | MEX文件

news2024/9/22 19:42:53

应用接口是MATLAB与其他语言相互调用各自函数的方法,MEX文件使MATLAB程序中可以调用或链接其他语言编写的函数,而MATLAB引擎使其他语言程序中可以调用MATLAB函数。

01、MEX文件


MEX是MATLAB Executable的缩写,是MATLAB中用于调用其他语言编写的程序的接口。用其他语言编写的MEX程序经过编译,生成MEX文件,可以作为MATLAB的扩展函数。MEX文件能够在MATLAB环境中调用,在用法上和MATLAB函数类似,但MEX文件优先于MATLAB函数执行。下面以C++为例,介绍MEX库函数、MEX源程序的构成、编译MEX源程序以及调用MEX文件的方法。

1. MEX函数


MEX库函数用于MEX程序与MATLAB环境交换数据和从MATLAB工作空间获取相应信息。所有MEX函数均在MATLAB的子文件夹extern\include中的头文件mex.h得到声明。表1列出了C/C++语言常用MEX函数及功能。


■ 表1 C/C++语言常用MEX函数及功能

2. MEX文件源程序的建立


MEX文件源程序由如下两个部分组成。
(1) 入口子程序。入口子程序的默认名字mexFunction,其作用是在MATLAB系统与被调用的外部子程序之间建立联系,定义被MATLAB调用的外部子程序的入口地址、MATLAB系统和子程序传递的参数等。入口子程序的定义格式如下: 

void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[])
{
}

 入口子程序有4个参数。nlhs定义输出结果的个数,plhs指向用于返回输出结果的变量,nrhs定义输入参数的个数,prhs指向存储输入参数的变量。prhs和plhs都是指向mxArray对象的指针,C++程序与MATLAB工作空间交换数据必须使用mxArray对象,对象各成员的值默认为double类型。
(2) 计算子程序。计算子程序包含所有完成计算功能的程序,由入口子程序调用。计算子程序的定义格式和其他C/C++子程序的定义格式相同。
头文件mex.h中包含了所有的MEX函数声明,因此在文件首部需要加入宏命令:

#include "mex.h"

 下面用一个实例说明MEX文件的基本结构。
【例1】用C++编写求两个数的最小公倍数的MEX文件源程序,并编译生成MEX文件。调用该MEX文件,求两个整数的最小公倍数。
程序如下:

# include "mex.h"
//求最小公倍数子程序
double com_multi(double *x,double *y){
int a, b, c, d; a = int(*x); b= int(*y); c=a>=b?a:b; d=c;
while (c%a!=0 || c%b!=0)
c=c+d; return c;
//入口子程序
void mexFunction( int nlhs, mxArray *plhs[ ], int nrhs, const mxArray *prhs[]){
double *result; int m,n, i;
//检查参数数目是否正确 if(nrhs!= 2) {
mexErrMsgTxt("输入参数应有两个!");return;
}
if(nlhs!= 1) {
mexErrMsgTxt("应有一个输出参数!");return;
//检查输入参数的类型 for(i= 0;i<2;i++){
m= int(mxGetM(prhs[i])); n = int(mxGetN(prhs[i]));
if( mxIsClass(prhs[i],"int") || !(m ==1 &&n==1)){
mexErrMsgTxt("输入参数必须是一个数.");
}
}
//准备输出空间
plhs[0] = mxCreateDoubleMatrix(1,1,mxREAL); result= mxGetPr(plhs[0]);//计算
*result= com_multi(mxGetPr(prhs[0]),mxGetPr(prhs[1]));

 将以上程序保存到当前文件夹,文件名为TryMex.cpp。


3. MEX文件源程序的编译


MEX文件源程序的编译需要具备两个条件:一是要求已经安装MATLAB应用程序接口组件及其相应的工具,另一个是要求有合适的C/C++语言编译器。
编译MEX文件源程序有两种方法:一是利用MATLAB提供的编译器,二是利用其他编译工具,如Microsoft Visual Studio。若使用MATLAB提供的编译器,则编译MEX源程序使用mex命令。例如,编译例1的MEX源程序,在MATLAB命令行窗口输入如下命令:

>> mex TryMex.cpp

系统使用默认编译器编译源程序,编译成功,将在当前文件夹下生成与源程序同名的MEX文件TryMex.mexw64。扩展名.mexw64表示生成的是一个可以在64位Windows系统下运行的MEX文件。
调用MEX文件的方法和调用M函数的方法相同。例如,在MATLAB命令行窗口输入以下命令测试上述MEX文件:

>> z = TryMex(8,34)
z = 136

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1249233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

UniWebView 版本3 版本4 版本5介绍

一、介绍 UniWebView是iOS/Android上的web视图组件的包装器&#xff0c;所以运行时拥有与原生web相似性能。是针对Unity所写的插件&#xff0c;节省了项目的开发时间。 官网地址&#xff1a;UniWebView 二、下载&使用 1、下载 &#xff08;1&#xff09;、Unity Asset …

electron windows robotjs 安装教程

Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘&#xff0c;获取屏幕内容&#xff0c;配合electron可做很多自动化操作。windows下配置环境有很多坑&#xff0c;很多文章都太旧了。试了很多次发现了…

线程-Thread类及常见方法

目录 一、创建线程 1.继承 Thread 类 2. 实现 Runnable 接口 3.匿名内部类创建 Thread 子类对象 4. 匿名内部类创建 Runnable 子类对象 5. lambda 表达式创建 Runnable 子类对象 二、Thread 类及常见方法 2.1 Thread 的常见构造方法 2.2 Thread 的几个常见属性 2.3 启…

nodejs微信小程序+python+PHP-青云商场管理系统的设计与实现-安卓-计算机毕业设计

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

82基于matlab GUI的图像处理

基于matlab GUI的图像处理&#xff0c;功能包括图像一般处理&#xff08;灰度图像、二值图&#xff09;&#xff1b;图像几何变换&#xff08;旋转可输入旋转角度、平移、镜像&#xff09;、图像边缘检测&#xff08;拉普拉斯算子、sobel算子、wallis算子、roberts算子&#xf…

nodejs+vue+python+PHP+微信小程序-青云商场管理系统的设计与实现-安卓-计算机毕业设计

研究步骤、措施&#xff1a; &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&#xff09;做需求分析及功能模块划分&#xff1b; &#xff08;3&#xff09;指导老师通过后&#xff0c;设计出用例图&#xff0c;E-R图&#xff0c;功能模块图 …

Python基础:JSON保存结构化数据(详解)

1. JSON概念 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;也易于机器解析和生产。   虽然JSON使用JavaScript语法来描述数据对象&#xff0c;但是JSON仍然独立于语言和平台&#xff0c;JSON解…

基于C#实现Kruskal算法

这篇我们看看第二种生成树的 Kruskal 算法&#xff0c;这个算法的魅力在于我们可以打一下算法和数据结构的组合拳&#xff0c;很有意思的。 一、思想 若存在 M{0,1,2,3,4,5}这样 6 个节点&#xff0c;我们知道 Prim 算法构建生成树是从”顶点”这个角度来思考的&#xff0c;然…

SOAP 协议和 HTTP 协议:深入解读与对比

SOAP 和 HTTP 协议 SOAP 协议 SOAP&#xff08; Simple Object Access Protocol&#xff09;是一种用于在节点之间交换结构化数据的网络协议。它使用XML格式来传输消息。它在 HTML 和 SMTP 等应用层协议的基础上进行标记和传输。SOAP 允许进程在整个平台、语言和操作系统中进…

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法

华硕灵耀XPro(UX7602ZM)原装Win11系统恢复安装教程方法&#xff1a; 第一步&#xff1a;需要自备华硕6个底包工厂安装包&#xff08;EDN.KIT.OFS.SWP.HDI.TLK&#xff09;或者自己备份的iso/esd/wim等镜像恢复 支持系列&#xff1a; 灵耀系列原装系统 无畏系列原装系统 枪…

基于 STM32Cube.AI 的嵌入式人脸识别算法实现

本文介绍了如何使用 STM32Cube.AI 工具开发嵌入式人脸识别算法。首先&#xff0c;我们将简要介绍 STM32Cube.AI 工具和 STM32F系列单片机的特点。接下来&#xff0c;我们将详细讨论如何使用 STM32Cube.AI 工具链和相关库来进行人脸识别算法的开发和优化。最后&#xff0c;我们提…

【matlab程序】matlab使用箭头在图像上标注

【matlab程序】matlab使用箭头在图像上标注 clear;clc;close all;x0:1/10000:2*pi; ysin(x); figure plot(x,y,LineWidth,2) x_begin 1; x_end 2; y_begin 0; y_end 0.2;annotation(arrow,XY2Norm(X,[x_begin,x_end]),XY2Norm(Y,[y_begin,y_end]),LineWidth,2,Color,r); …

HarmonyOS ArkTS 给应用添加通知和提醒(十二)

简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务诉求&#xf…

数字图像处理(实践篇)二 画出图像中目标的轮廓

目录 一 涉及的OpenCV函数 二 代码 三 效果图 一 涉及的OpenCV函数 contours, hierarchy cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]]) image&#xff1a;源图像。mode&#xff1a;轮廓的检索方式。cv2.RETR_EXTERNAL&#xff08;只检测…

Tars框架 Tars-Go 学习

Tars 框架安装 网上安装教程比较多&#xff0c;官方可以参数这个 TARS官方文档 (tarsyun.com) 本文主要介绍部署应用。 安装完成后Tars 界面 增加应用amc 部署申请 amc.GoTestServer.GoTestObj 名称不知道的可以参考自己创建的app config 点击刷新可以看到自己部署的应用 服…

npm ERR! node-sass@4.13.0 postinstall: `node scripts/build.js`

npm ERR! node-sass4.13.0 postinstall: node scripts/build.js npm config set sass_binary_sitehttps://npm.taobao.org/mirrors/node-sass npm install npm run dev Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\Administr…

4.操作系统常见面试题(2)

3.4 虚拟内存 直接使⽤物理内存会产⽣⼀些问题 1. 内存空间利⽤率的问题&#xff1a;各个进程对内存的使⽤会导致内存碎⽚化&#xff0c;当要⽤ malloc 分配⼀块很⼤的内存空间时&#xff0c;可能会出现虽然有⾜够多的空闲物理内存&#xff0c;却没有⾜够⼤的连续空闲内存这种…

org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder

密码&#xff0c;加密&#xff0c;解密 spring-security-crypto-5.7.3.jar /** Copyright 2002-2011 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with t…

基于 STM32F7 和神经网络的实时人脸特征提取与匹配算法实现

本文讨论了如何使用 STM32F7 和神经网络模型来实现实时人脸特征提取与匹配算法。首先介绍了 STM32F7 的硬件和软件特点&#xff0c;然后讨论了人脸特征提取和匹配算法的基本原理。接下来&#xff0c;我们将重点讨论如何在 STM32F7 上实现基于神经网络的人脸特征提取与匹配算法&…

基于官方YOLOv4开发构建目标检测模型超详细实战教程【以自建缺陷检测数据集为例】

本文是关于基于YOLOv4开发构建目标检测模型的超详细实战教程&#xff0c;超详细实战教程相关的博文在前文有相应的系列&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a;《基于yolov7开发实践实例分割模型超详细教程》 《YOLOv7基于自己的数据集从零构建模型完整训练、…