⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mathtools595.txt

📁 C++ interface
💻 TXT
字号:
发信人: FangQ (木头虫子), 信区: MathTools 
标  题: Matlab与C++接口与混合编程讨论小结(六) 
发信站: BBS 水木清华站 (Tue Nov  2 22:27:44 1999) 
  
第二章、 
第四节、用c编写mex程序[四] 
发信人: fasiondog (乱了), 信区: MathTools 
标  题: 用c编写mex程序  [part 4] (转信) 
发信站: BBS 水木清华站 (Mon Apr  5 12:50:30 1999) 
  
发信人: dodoo (虚怀), 信区: Programming 
标  题: 用C编写mex程序  [PART 4] 
输入数据是在函数调用之前已经在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]); 
  
 plhs[0]=mxCreateDoubleMatrix(M,N,mxREAL); 
 outData=mxGetPr(plhs[0]); 
 for(i=0;i<M;i++) 
  for(j=0;j<N;j++) 
xREAL); 
 outData=mxGetPr(plhs[0]); 
 for(i=0;i<M;i++) 
  for(j=0;j<N;j++) 
xREAL); 
 outData=mxGetPr(plhs[0]); 
 for(i=0;i<M;i++) 
  for(j=0;j<N;j++) 
   outData[j*M+i =inData[(N-1-j)*M+i]; 
} 
  
  
当然,Matlab里使用到的并不是只有double类型这一种矩阵,还有字符串类型、稀疏矩 
阵、结构类型矩阵等等,并提供了相应的处理函数。本文用到编制mex程序中最经常遇到 
的一些函数,其余的详细情况清参考Apiref.pdf。 
-- 
  
      这   是   最   后   的   斗   争 
      THIS   IS   THE  FINAL  CONFLICT 
  
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.115.15.64] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -