使用mex和C可以加快算法的运行速度,mex文件包含一个入口函数如下:

c}%Qe7L$vIln%J0void mexFunction( int nlhs, mxArray *plhs[],int nrhs, const mxArray *prhs[] )51Testing软件测试网6X{+vB7a!f7_)G

51Testing软件测试网~%h$GT)X7s Zj3K/m

入口函数有四个参数:prhs为mxArray结构体类型的指针数组,该数组的元素按顺序指向所有的输入参数;;pL0@0n8qE0

51Testing软件测试网B.NuCEM0@S?

nrhs为整数类型,它标明了输入参数的个数。51Testing软件测试网8[2A;B-~on9u-v

51Testing软件测试网7^!})E)I:P,tJ9Cy

plhs:为mxArray结构体类型的指针数组,该数组的元素按顺序指向所有的输出参数;rL4A2}ort~0

51Testing软件测试网K9R(e7@pD.xbq

nlhs:输出参数的个数+t:d{rx8E l9r9y0

51Testing软件测试网tm*v)v4t pc2i

在入口程序完成两件事情:51Testing软件测试网!x0J+A@}OP:_6`]

5N&CY?|:B0第一:从输入的mxArray结构体中获得计算完毕的数据,然后在用户的子程序中加以使用,Xz`D7~`G0

DL(pq2r/}b!C2E]0第二:用户可以将计算完毕的结果返回给一个用于输出的mxArray结构体。51Testing软件测试网N9a#Sa.t f

51Testing软件测试网$R:FL ee,R/f&}2D

mex源文件的两个组成部分可以分为两个文件也可以放在一个文件中,必须包含mex.h头文件,该头文件包含matrix.h和一些以mex开头的子函数。51Testing软件测试网-i$\*v&\S['A"vR|E^

w

51Testing软件测试网:S7xf;Gq"g*D~

下面举几个例子:u*|\X9k

H~f5Q;x0

51Testing软件测试网%]#sn3\V0A

,BS-j#v/@9d0

lz5OR+M#E%rR0#include "mex.h"51Testing软件测试网/f.AoF6kON8e%D

/* 输入参数 */[ NT\3\4y3f0

:kF!d7VIin!k051Testing软件测试网Eg`o%g-l"k7Oj1J

#define MInput prhs[0]     51Testing软件测试网m^jx$j3uCL

/* 输出参数 */:eO,J"p i+E5jO0

R,w5k$V,I5PuYN06SX2w[8~0Hta-B0#define OUTM plhs[0]ub(\yDKf:XrE0

U m q%C1N7R6?#A)@0;sQSgM)f9@)ZL0void mexFunction( int nlhs, mxArray *plhs[],

,EI.I"HC0      int nrhs, const mxArray *prhs[] )

H6E5n3zUQ0         {51Testing软件测试网D/?'bWcQQ4t2M

int i,j,N,L;51Testing软件测试网S&b"{g_ Y(@&?

double *Input,*output;

5e%h3yk'o0   51Testing软件测试网hX6y~)yF

if (nrhs < 1)  51Testing软件测试网z.N;~}4j(S;FJF

{51Testing软件测试网j&z9X"?y#q4s

mexErrMsgTxt("至少需要一个参数!");51Testing软件测试网FXg q^J#}G

}

n6|{+gk([4|0        Input= mxGetPr(MInput); /*获取矩阵*/  51Testing软件测试网k+x@1[4Ga

N = mxGetM( MInput ); /*获取矩阵的行*/51Testing软件测试网ZQDJ^

L = mxGetN( MInput); /*获取矩阵的列*/51Testing软件测试网v;_H(b0{T.H

for( i=0;i

}6Uk{

{

_e~8X1i"D2n3i8|Ww0    for ( j=0;j

printf("%f ", Input[i+j*N]);/*若索引从1开始则变成i-1+(j-1)*N MATLAB 是按列存数据 */ 51Testing软件测试网*u%w8CB"CA|

printf("\n"); /*输出完一行,换行*/51Testing软件测试网'd0i[:c ?4d

}

KC ]gTK~'LX0    51Testing软件测试网^ w{W%U4K p-\

OUTM= mxCreateDoubleMatrix(N,L, mxREAL); /* 建立输出矩阵*/

[6aP!p*\0 output=mxGetPr(OUTM);

'Ht'p

k.OlCwu0  for( i=0;i

4EM~"v:@J,c0{

4{Q0`%\;H/I$f0    for ( j=0;j

1u7T)['PZD#q]Vn0Ad

G0    output[i+j*N]=Input[i+j*N];/*若索引从1开始则变成i-1+(j-1)*N*/

:St?SKa$zf%A0

X#ine P"J%NF0}

m8uG_bc!\$~0  }q*tj4w"S3s051Testing软件测试网!t&aVR&o

下面是字符串的操作:51Testing软件测试网

H` _,`+st5Y;l*dV

"qpJ@8\L0Z9Iz0Vo:[3Z?I$sk0JzlB|9`J^0#include "mex.h"51Testing软件测试网 x-Y&Hm}S%e

^o7q*H3ReeP.Y0void51Testing软件测试网Q-GV"?t|-RT7k(IV

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

u|t}2u3o0xU/kx0{51Testing软件测试网z0~XSDH!u%j

char *buf;51Testing软件测试网f1Ss1Gq

mwSize buflen;51Testing软件测试网8B*Gc9k^B"vU

int status;51Testing软件测试网x;eu!T

R2JFO2y

0V

E](H*n!Qvz0(void) plhs;    /* unused parameters */

"kA;`[N:CR0

7wOOeZ}mO0    /* Check for proper number of input and output arguments */

f&L$} w:cp)]F0    if (nrhs != 1) { 51Testing软件测试网!m Y6Jibs

mexErrMsgTxt("One input argument required.");

OnZ2cv*H*?M0    } 51Testing软件测试网GcDW4p*x

if (nlhs > 1) {51Testing软件测试网3L^ j8}B&c

C

mexErrMsgTxt("Too many output arguments.");51Testing软件测试网9oYzA9Qb

}

J&{v@4X7L@1^:w0

];ttQW.FR0    /* Check for proper input type */51Testing软件测试网m/xd1u)[#i V

if (!mxIsChar(prhs[0]) || (mxGetM(prhs[0]) != 1 ) )  {

.M;a:poRL0 mexErrMsgTxt("Input argument must be a string.");51Testing软件测试网R'X

m'g_2q'[6_l

}51Testing软件测试网^-A(O%iUMy

51Testing软件测试网~bx0e1tqW

/* Find out how long the input string is.  Allocate enough memory

0|d$B#yw)@#s

D0       to hold the converted string.  NOTE: MATLAB stores characters51Testing软件测试网-Lj,m7Yyb&bo

as 2 byte unicode ( 16 bit ASCII) on machines with multi-byte

W|n^v;y/UD0       character sets.  You should use mxChar to ensure enough space

4iLN}J0       is allocated to hold the string */

KGl1^'H2C+[?0

8XSsvR/]3c0    buflen = mxGetN(prhs[0])*sizeof(mxChar)+1;51Testing软件测试网-vRg(?A/l

buf = mxMalloc(buflen);51Testing软件测试网 F/e*T#JGniT

,ld;]4hmG0    /* Copy the string data into buf. */ 51Testing软件测试网,lr7{+?+_C#u%Q'U

status = mxGetString(prhs[0], buf, buflen);   51Testing软件测试网*Z.Z6X0GuL

mexPrintf("The input string is:  %s\n", buf);51Testing软件测试网C5]|0^7LP

/* NOTE: You could add your own code here to manipulate 51Testing软件测试网'Jv`8ci tc

the string */

:iNum@P%E#U0

9wEH$Z%}9ZQ0    /* When finished using the string, deallocate it. */

5U-M9YoIdoVC0    mxFree(buf);

8A.\SKN0C'kw,A0

)B?e6@!G)F+i0}Q

oa:K9`E A0

0],w8V9v-f*H0动态分配内存的例子:v)Xo%S2gsKx0

51Testing软件测试网f:]sbB'_$aA0I

51Testing软件测试网5X0J;Ef?*e"I%SSc`{f%s4`{0#include "mex.h"oB-QMF0

\M-UJVL0/* The mxArray in this example is 2x2 */51Testing软件测试网E#J5ps!_Qc

#define ROWS 2

?f~rl-X8Y&a0#define COLUMNS 251Testing软件测试网&b+T$M/yzUc

#define ELEMENTS 451Testing软件测试网gRFe6q

51Testing软件测试网&u#Y7FW:z$PI O ]!nN

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {51Testing软件测试网L4Wrq,K:{

double  *pointer;          /* pointer to real data in new array */51Testing软件测试网j.QmjH+X5Q

double  *dynamicData;      /* pointer to dynamic data */

~t.O?.eB!k#TE0    const double data[] = {2.1, 3.4, 2.3, 2.45};  /* existing data */

:q`G~,f:XgpEC0    mwSize index;51Testing软件测试网(u2z?zx)a"jC

51Testing软件测试网Q-E@4A#g~"}X

/* Check for proper number of arguments. */

?#PP'koV0    if ( nrhs != 0 ) {

\#KR6Hl@a8@0        mexErrMsgIdAndTxt("MATLAB:arrayFillGetPrDynamicData:rhs","This function takes no input arguments.");51Testing软件测试网V9]/x};f`?\

}51Testing软件测试网{&vp G3C3gY/f

JOTO9Q(_/Y.CY0/* Create a local array and load data */

C^ a9J?1\)k0    dynamicData = mxMalloc(ELEMENTS * sizeof(double));

9E6M,e6Bee,s%t,\0    for ( index = 0; index < ELEMENTS; index++ ) {51Testing软件测试网 yus#Hyy N8v*K

dynamicData[index] = data[index];51Testing软件测试网9hadW]7{'Nr-[

}51Testing软件测试网6vk3V%h \V)cn!M'o

c5z;z0w1l*|s |c0/* Create a 2-by-2 mxArray; you will copy existing data into it */

9E o9^7p C_?0    plhs[0] = mxCreateNumericMatrix(ROWS, COLUMNS, mxDOUBLE_CLASS, mxREAL);51Testing软件测试网X`'M;y,V#pa8N3KC

pointer = mxGetPr(plhs[0]);51Testing软件测试网JNF

?qKf}-X

51Testing软件测试网}r]4j!D,W?*|a

/* Copy data into the mxArray */

,qB _3]AR0    for ( index = 0; index < ELEMENTS; index++ ) {

.m{w$gq/MF0        pointer[index] = dynamicData[index];

7j'kQE9N){{AN0    }51Testing软件测试网{|9]Kr

/xb!LhCe0/* You must call mxFree(dynamicData) on the local data.

"n5K'l!K5~+p

Bd0       This is safe because you copied the data into plhs[0] */

dQ&`3w0_A {d0    mxFree(dynamicData);

"w4OkJF zu@G0    51Testing软件测试网&Kl4ow]:hFiGOK8To

return;

(Z,Z4i{(CfR0}51Testing软件测试网1^S"P~+kl

mex matlab混编,Matlab中mex与C混合编程总结相关推荐

  1. 解决了java+matlab混编+web(jsp)调用Matlab,网页中显示Figure,详细实例

    例子简介 网上java+matlab混编的挺多,大多数实例也都能实现出来,但是将matlab生成出来Figure显示在jsp页面中并配合WebFigure实现的例子却很少,所以我将自己的尝试结果详细的 ...

  2. mac下配置进行c和matlab混编

    mac下配置进行c和matlab混编 是用mac的小伙伴有时候有没有感觉很痛苦!遇到什么问题,找相关的解决办法真心不方便,我最近在搞一段程序,要进行c和matlab的混编,可是,在matlab中输入: ...

  3. matlab振动频谱分析是不是要,VB和Matlab混编实现振动信号的频谱分析

    VB和Matlab混编实现振动信号的频谱分析 3 0 物理测试 2 O O 4年第 2期 V B和 Ma t l a b混编实现振动信号的频谱分析 谭轶平, 王振清 ( 北京航空航天大学材料学院,北京 ...

  4. mex matlab混编,mex混编后运行总是导致matlab崩溃是什么情况?

    麻烦各位大神帮忙看看.以下是错误信息,先行谢过了! ------------------------------------------------------------------------ S ...

  5. m 文件 dll matlab 中调用_Java与MatLab混编

    该篇介绍Java与MatLab的混合编程 环境:Windows10,Jdk 1.8.0_261 64位,MatLab r2018b 64位 先安装MatLab MatLab安装 一.打开MatLab, ...

  6. wpf matlab混编,WPF(C#)与MATLAB混合编程

    WPF(C#)与MATLAB混合编程 WPF可以为开发者提供便捷地构建用户交互界面的解决方法,而matlab则在科学计算方面有着无与伦比的优势,因此在一些需要将科学算法转换为应用软件的项目中,需要应用 ...

  7. python与matlab混合编程_python 与 matlab 混编

    Matlab的官方文档中介绍了 Matlab 与其余编程语言之间的引擎接口,其中包括对于 Python 开放的引擎 API,可参考官方教程,其中包括引擎安装,基本使用,以及Python与Matlab之 ...

  8. c 与matlab混编,C与MATLAB混合编程之调用MATLAB引擎

    Visual Studio调用MATLAB需要的配置已经在<Visual Studio调用MATLAB的配置>一文中给出了详细的步骤,本文将介绍混合编程的示例. 在C中调用MATLAB,据 ...

  9. c 与matlab混编,谈谈Matlab与C/C++或C#的互调用(混合编程)

    记得当初一个师姐问我知不知道如何在Matlab里调用C++的程序,还真把我问住了.因为我以前就知道C++调用Matlab的方法,这方面网上资料一大堆.没想到现在自己突发奇想又遇到另外一个问题,Matl ...

最新文章

  1. Redis-12Redis 流水线( pipeline )
  2. 你真的了解 lambda 吗(纠错篇)?
  3. 《JavaScript忍者秘籍》——导读
  4. 数学物理方法pdf_《数学物理方法》周明儒(第2版)补充材料与习题详解
  5. Sentinel(二十六)之Sentinel Dashboard中修改规则同步到Nacos
  6. 薪资是跳出来的,不是涨出来的!
  7. ckeditor与ckfinder的使用方法 .NET (转载)
  8. spring对redis的操作
  9. SQL Server2000 在 win2003上安装不上,我的解决办法
  10. 台达EH3系列PLC进行MODBUS RTU通信的具体方法和步骤(非常详细)
  11. activiti设计器会签人员配置
  12. DOM是什么?(超详细解释)
  13. idea破解到2100年
  14. access突然需要登录_登录信息提示
  15. Python程序设计基础教学大纲
  16. CTE递归 MAXRECURSION 遇到的问题
  17. 【Web技术】1348- 聊聊水印实现的几种方式
  18. 【Tableau 设计提示16】如何在 Tableau 中使用标记(批注)
  19. JZOJ 5426 Galo
  20. 一文搞懂│王者游戏中荣耀水晶难抽?探索游戏中的抽奖算法

热门文章

  1. 程序员如何拓展技术技能?
  2. 数学编织家和他们软软的作品
  3. Web网站模板-响应式企业产品介绍模板(HTML+CSS+JavaScript)
  4. 中国智能制造系统架构(IMSA模型)
  5. 解决工作流:org.activiti.engine.ActivitiException: Unknown property used in expression: ${AAAAA}报错
  6. 摩拜ofo补贴战熄火 月卡大涨价网店打折卖
  7. MySQL 利用xtrabackup进行增量备份详细过程汇总
  8. 30个漂亮的免费 Flash 网站模板下载
  9. oracle访问控制策略查看,ORACLE 安全访问策略VPD与ORA-28132
  10. 国外可以免费发布供求信息的网站(转)