声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 matlab 查看内容

Matlab与C++接口与混合编程讨论小结

2015-10-29 00:33| 发布者: aspen| 查看: 4354| 评论: 1|原作者: AaronSpark|来自: 声振论坛

摘要: Matlab与C++接口与混合编程讨论小结 一章、概述  Matlab是当今世界上使用最为广泛的数学软件,它具有相当强大的数值计算、 数据处理、 系统分析、图形显示,甚至符号运算功能,是一个完整的数学平 台,在这 ...
用c编写mex程序[二]

   输入数据是在函数调用之前已经在Matlab里申请了内存的,由于mex函数与Matlab共用同
一个地址空间,因而在prhs[]里传递指针就可以达到参数传递的目的。但是,输出参数 却需
要在mex函数内申请到内存空间,才能将指针放在plhs[]中传递出去。由于返回指针 类型必须
是mxArray,所以Matlab专门提供了一个函数:mxCreateDoubleMatrix来实现内 存的申请,函
数原型如下: mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity ComplexFlag
) m:待申请矩阵的行数 n:待申请矩阵的列数 为矩阵申请内存后,得到的是mxArray类型的
指针,就可以放在plhs[]里传递回去了。但 是对这个新矩阵的处理,却要在函数内完成,这
时就需要用到前面介绍的mxGetPr。使用 mxGetPr获得指向这个矩阵中数据区的指针(double
类型)后,就可以对这个矩阵进行各 种操作和运算了。下面的程序是在上面的show.c的基础
上稍作改变得到的,功能是将输

  //reverse.c 1.0 #include "mex.h" void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[]) { double *inData; double *outData; int M,N; int
i,j;

   inData=mxGetPr(prhs[0]); M=mxGetM(prhs[0]); N=mxGetN(prhs[0]); m:待申请矩阵
的行数

   plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL); outData=mxGetPr(plhs[0]); for(i=0
;iN;j++) xREAL); outData=mxGetPr(plhs[0]); for(i=0;iN;j++) outData[j*M+i =inData[
(N-1-j)*M+i]; }

  当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩
阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到 的
一些函数,其余的详细情况清参考Apiref.pdf。
Matlab与C++接口与混合编程讨论小结(六)
  
发表评论

最新评论

引用 afly 2006-3-28 19:40
请问版主有没有有关vc++6.0调用mcc产生的库函数(matlab7.1环境下)的具体步骤啊?在这个matlab7 .1版本下有关这个方面的资料太少了,谢谢了!

查看全部评论(1)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2025-4-11 21:45 , Processed in 0.042558 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部