企业网站建设的材料,常州模板网站建设咨询,找国外人做网站,wordpress开发企业网站在利用MATLAB进行封装函数之后#xff0c;最主要的目的是对函数进行调用#xff0c;能够对矩阵运算和其他算法的运行进行快捷处理。
在有了MATLAB函数之后封装成DLL文件之后#xff0c;在QT中添加动态链接库#xff0c;就可以实现函数的调用过程#xff0c;这个过程相对简…在利用MATLAB进行封装函数之后最主要的目的是对函数进行调用能够对矩阵运算和其他算法的运行进行快捷处理。
在有了MATLAB函数之后封装成DLL文件之后在QT中添加动态链接库就可以实现函数的调用过程这个过程相对简单这里重点说明如何使用生成的DLL。
以一个MATLAB函数为例
function y int2bin(source,N)
%简单的将10进制整数转化为N位2进制
%正负均用原码表示
len length(source);
y zeros(len,N);
if nargin~2error(You have to input two arguments.)
end
if N0error(You have to input a positive number of digits.)
end
if N~fix(N)error(You have to input a integer for N)
end
for i 1:lenif (source(i) 0) % 判断是否为正数y(i,1) 0; % 正数第一位0tempsource(i);for j 2 : Ny(i,N-j2)mod(temp, 2);temp floor(temp/2);endelsey(i,1) 1; % 负数第一位1tempabs(source(i));for j 2: Ny(i,N-j2)mod(temp, 2);temp floor(temp/2);endend
end这个函数的功能为把输入的10进制数据转换为N位的1进制数据这个函数有有个输入参数一个输出参数通过deploytool指令对其进行封装生成对应的三个文件 打开.h文件其中需要使用的函数有两个 一个为这个是函数的初始化函数调用该函数看是否能够初始化成功。
extern LIB_int2bin_C_API
bool MW_CALL_CONV int2binInitialize(void);另一个为功能函数
extern LIB_int2bin_CPP_API void MW_CALL_CONV int2bin(int nargout, mwArray y, const mwArray source, const mwArray N);该功能函数中含有四个参量第一个参量int nargout 这个参数是一个int型参数注意这个参数表示的是输出参数的个数对应该int2bin函数输出只有一个y,那么在进行函数调用的时候需要在此处填入1如果MATLAB编写的函数有个两个输出参量那么对应QT函数调用时候这个第一个输入参量int nargout需要输入2如果多个输出参量没有注意设定这个int值将只有第一个输出量有结果。
函数中后面的三个参量正好对应着输出变量和两个输入变量名称是和MATLAB函数一一对应的。注意变量类型为mwArray所以对应输出的变量都需要按照该类型进行声明和定义。
下面给出qt中调用的完整过程。
// 把数据转换成16进制数据
if(!int2binInitialize())
{qDebug() Could not initialize int2bin! ;
}
qDebug() int2binInitialize! ; // 查看函数是否初始化成功mwArray output(mxDOUBLE_CLASS,mxREAL);
mwArray input1(360, 1, mxDOUBLE_CLASS);
mwArray input2(1, 1, mxDOUBLE_CLASS);
double input2Data[1] {8};
input2.SetData(input2Data, 1);
int2bin(1, output, input1, input2);这个过程就完成了函数的调用的过程注意对于传入的函数的值必须为mwArray类型对于该类型的赋值可以使用方法setData,其中的第二个参数为赋值的个数因为数据类型表示的是矩阵所以不一定是一个对应的传入的量可以用一个数组类型注意输入数据的维度要和MATLAB中定义的保持一直如第一个input1表示的输入的是一个360*1的向量共360个元素这时候如果利用数组赋值需要input1.SetData(input1Data, 360)对该变量进行赋值。
而对于从变量中取数值使用的过程可以直接使用角标来提取也可以使用Get方法来提取。