1、首先将下载的程序包解压到目标路径,并将MATLAB的工作路径设置成跟解压文件目录一致。
2、创建变量X和变量Y,测试程序是否能正常运行并跑出结果;错误提示:未定义与 'double' 类型的输入参数相对应的函数 'estpab'。说明MATLAB运行目录下不存在可调用的estpab程序文件,但是检查文件目录发现这一函数是有的,所以说明这个函数的cpp没有成功编译。调研后发现,如图所示的三种文件版本比较旧,而且基于32位系统生成,不适用于WIN 10 64位系统的MATLAB 2014a软件版本。
3、重新对程序包中的所有cpp文件进行编译(使用mex命令):执行 mex estpab.cpp, 成功;执行 mex estcondentropy.cpp,失败,错误提示:错误使用 mex髫潋啜缅estcondentropy.cppF:\2spectranalysis\estcondentropy.cpp(33) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据F:\2spectranalysis\estcondentropy.cpp(34) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据F:\2spectranalysis\estcondentropy.cpp(37) : warning C4267: “初始化”: 从“size_t”转换到“long”,可能丢失数据F:\2spectranalysis\estcondentropy.cpp(65) : error C2668: “log”: 对重载函数的调用不明确 E:\visualstudio\VC\INCLUDE\math.h(575): 可能是“long double log(long double)” E:\visualstudio\VC\INCLUDE\math.h(527): 或 “float log(float)” E:\visualstudio\VC\INCLUDE\math.h(120): 或 “double log(double)” 尝试匹配参数列表“(int)”时其中只有error提示比较重要,下面重点讲如何根据提示解决error。
4、error显示log函数调用出了问题,下面紧跟着提示可能是long double log (long double)....,这说明,应该是log函数的输入或输出变量的数据类型有问题。双击查看estcondentropy.cpp,按照提示找到错误代码行65,发现log函数的输入是一个整型常量“2”,这样我们就找到了问题症结。将“2”改为“2.00”,意义在于将输入参数的数据类型由整型改为了浮点型。
5、再次执行编译命令,显示编译成功。依次对本程序包中的所有cpp文件进行编译,编译后每个cpp文竭惮蚕斗件都生成一个对应的.mexw64文件,这时可以删掉所有的.cpp和.h文件,因为MATLAB调用的是这个.mexw64文件,只要保留这个文件和.m文件即可。再次运行程序包的主函数(就是所有其他函数程序都编译好后,它才能运行的函数),本例中为mutualinfo函数执行:mutualinfo(X,Y) 输出结果,证明程序调用成功,这一程序包是可用的。