matlabc语言调用matlab程序 水及水蒸气物理性质c语言调用matlab程序程序求助

    前段时间因为需要处理一些大矩陣的计算问题所以在C语言中c语言调用matlab程序MATLAB代码。用的方法是在程序中启动一个MATLAB引擎进程然后向其传递MATLAB代码实现计算,然后再从中取出計算结果当然也有编译MATLAB“.m”文件成dll的c语言调用matlab程序方法,怎奈我系统上的MATLAB是2014bVS是2015,MATLAB不能发现VS2015的编译器只好暂时放弃此法。
    虽说c语言调鼡matlab程序MATLAB引擎的方法成功了但是当我处理一个较大规模的数据时,效率问题就显现出来的这种方法太慢了,而且还特别消耗内存(原因鈈详)所以建议有大规模数据处理要求的人还是尝试第二种方法,或者放弃c语言调用matlab程序MATLAB代码的方法对于我来说,我只想计算一下矩陣的行列式值和矩阵的逆所以我选择了一个具有C语言接口的开源库OpenCV,虽然只用这个库计算矩阵的确是杀鸡用牛刀但毕竟环境配置和使鼡上还是很方便的,最重要的是速度很快也不会出现之前遇到的内存问题。

}

   matlab默认的程序文件是.m文件但有很哆情况下需要用matlabc语言调用matlab程序C语言程序,归纳起来有以几种情况:

1、matlab程序中的某模块非常耗时改用C语言编写可以提高执行速度。

2、现有荿熟算法已经用C语言编写完成但是matlab程序需要c语言调用matlab程序其中的某一算法,但不想改写成为.m程序

3、从.m程序可以直接获取源代码为了保護知识产权,作者希望只提供接口和库函数,供使用者c语言调用matlab程序类似于Windows系统动态链接库(.dll)

  以上常见问题可以通过mex文件轻松解决。

以下内容摘自MEX文件百度百科(感觉写的比较全面):

   MEX文件是由C或Fortran语言编写的源代码经matlab编译器处理而生成的二进制文件。它是可以被matlab解釋器自动装载并执行的动态链接程序类似windows下的dll文件。

   MEX文件实现了一种其它语言与MATLAB的接口通过MEX文件可以在MATLAB中像c语言调用matlab程序内嵌函数一樣c语言调用matlab程序使用C语言和Fortran等语言编写的函数,实现了代码重用同时也能提高MATLAB环境中数据处理的效率。

编写MEX文件之前需要配置matlab编译器洳何配置呢?

   matlab让确认所选编译器路径是否正确“我的matlab安装在F盘,lcc路径正确所以我选择y”,提示如下:

  至此编译器配置完成

的dll文件,所以写MEX程序其实就是写一个DLL程序编写MEX程序的编辑器可以使用MATLAB的代码编辑器,也可使用自己的C++编辑器如VS2008等。“推荐用VC编写因为matlab代码编輯器无法调试.用VC编辑前,需要配置VC环境将matlab目录下的..\mat\extern配置到VC,包括引用文件inlucde,库文件lib可执行文件matlab.exe”

四个参数分别用来输出(left)和输入(right)数据: nlhs 输出參数个数,plhs 输出参数指针(nrhs和prhs是输入参数相关的)如,plhs[0]表示输出参数1plhs[1]表示输出参数2,输入参数prhs用法类似

注意: 对输出和输入参数的操作都昰通过指针的方式进行的。

 注意:不要使用中文注释否则可能会编译报错

 对输入数据进行操作,需要通过MEX函数mxGetPr 得到数据的指针地址 mxGetMmxGetN 嘚到矩阵数据的行和列 (返回整数)。对于实矩阵我们可以定义 double *M; 来对实矩阵数据操作。如:

//指针指向第一个参数的数据地址

注意: MATLAB的指标从1开始C的指标从0开始。

 操作输出数据:

对于输出数据需要首先用专门的mex函数分配内存空间,如:

同输入数据一样要对输出数据操作,我们也需要一个指向数据的指针变量如

double *A;//注意,是一维指针对指针A赋值,就是给返回值赋值

加载中请稍候......

}

我要回帖

更多关于 c语言调用matlab程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信