
例如你有一个 new.c 需要被matlab调用,则如下 *** 作:
把new.c放在MATLAB当前目录中,在MATLAB中输入mex new.c。然后matlab会生成编译文件new.mexW32。你就可以直接在matlab中调用new.c里的函数了。当然c文件里面的函数格式必须按照matlab的要求来。
a=textread('data.txt','%*s%*s%f%*s','headerlines',3,'delimiter',' ')save ok.txt a -ascii
首先headerlines是文件头有多少行
delimiter就是词跟词之间的分隔符。
'%*s%*s%f%*s'这个比较麻烦一些。
首先%s是字符串的意思,%f是浮点数的意思
而在它们中间加上*,表示跳过这个词。
%*s%*s的意思就是跳过前两个词。
先看一个简单的程序(该程序保存在matlab主目录下名字是mexDemon.cpp,或者在主目录下新建一个.cpp文件):#include "mex.h"
//加入头文件,该头文件在VS2010中无法include,但是不影响其在matlab中的编译,反而在matlab编译还需要include它
#include <vector>
using namespace std
void mexFunction(int nlhs, mxArray *plhs[],int nrhs,const mxArray *prhs[])
//mexFunction就类似于main函数
{
//nlhs代表的是输出参数的个数
//plhs是一个指针数组,里面的指针指向mxArray类型,每一个指针指向一个输出
//nrhs代表的是输入参数的个数
//prhs是一个指针数组,里面的指针指向mxArray类型,每一个指针指向一个输入
vector<vector<double>>array2d
double *z
plhs[0] = mxCreateDoubleMatrix( 5, 6, mxREAL)//第一个输出是一个5*6的矩阵
z = mxGetPr(plhs[0])//获得矩阵的第一个元素的指针
array2d.resize(5)
int ii = 0
for(int i = 0i <5i++){
for(int j = 0j <6j++){
z[i*6 + j] = ii//指针访问矩阵是列优先的,请自己循环程序和分析输出结果
ii++
}
}
}
/*
*ans =
0 510152025
1 611162126
2 712172227
3 813182328
4 914192429
*/
然后对Matlab编译应用程序mex的编译器进行设置,在命令窗口输入 Mex –setup。
跟着步骤走选择合适的编译器即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)