把耗时的函数(尤其是包含大量循环)用c语言实现,并编译成mex函数可以加快运行速度。
使用mex要求你的电脑上已经安装有VC6.0或Visual Studio或其他编译器(本人使用的2010b似乎已经不支持VC6.0了)。
在Matlab的Command Window里键入mex -setup,根据提示一步步设置就可以了。(只用设置一次,以后就可以直接用了)。
以下是一个简单的例子:
#include <stdio.h>
#include "mex.h"
void my_multi(double *arrayin,double multi,double *arrayout,int xdim,int ydim)
{
int i,j;
double **array;
//动态数组
array = (double **)malloc(sizeof(double *)*xdim);
for(i = 0; i < xdim; i++)
{
*(array + i) = (double *)malloc(sizeof(double)*ydim);
}
/*在Matlab里,数组下标从1开始的,而在C语言中,数组下标从0开始
另外,数据在matlab中是按列存储,而在C中是按行存储,所以:
Matlab里的MxN矩阵中的元素a(i,j)在传递到C中的一维数组data后对应于data[j*M+i]
*/
for(j = 0; j < ydim; j++)
{
for(i = 0; i < xdim; i++)
{
array[i][j]=arrayin[j*xdim+i];
}
}
//接下来就可以像普通C程序那样对数组进行处理了,这里是一个简单的例子
for(i = 0; i < xdim; i++)
{
for(j = 0; j < ydim; j++)
{