MATLAB 与C混合编程:通过mex提高运行速度

本文介绍了如何使用C语言编写mex函数,以提高MATLAB中的计算速度。通过设置编译器,创建C源文件,然后在MATLAB中编译成mex函数,可以将耗时的矩阵运算加速。文中提供了一个简单的矩阵乘法例子,并强调了在混合编程中需要注意的数据类型转换和内存管理问题。
摘要由CSDN通过智能技术生成

把耗时的函数(尤其是包含大量循环)用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++)
{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值