当前位置: 首页 > article >正文

MATLAB函数封装2:QT调用封装函数

在利用MATLAB进行封装函数之后,最主要的目的是对函数进行调用,能够对矩阵运算和其他算法的运行进行快捷处理。

在有了MATLAB函数之后封装成DLL文件之后,在QT中添加动态链接库,就可以实现函数的调用过程,这个过程相对简单,这里重点说明如何使用生成的DLL。

以一个MATLAB函数为例,

function y = int2bin(source,N)
%简单的将10进制整数转化为N位2进制
%正负均用原码表示
len = length(source);
y = zeros(len,N);
if nargin~=2
    error('You have to input two arguments.')
end
if N<0
    error('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:len
    if (source(i)>= 0) % 判断是否为正数
        y(i,1) = 0; % 正数第一位0
        temp=source(i);
        for j= 2 : N
            y(i,N-j+2)=mod(temp, 2);
            temp = floor(temp/2);
        end
    else
        y(i,1) = 1; % 负数第一位1
        temp=abs(source(i));
        for j= 2: N
            y(i,N-j+2)=mod(temp, 2);
            temp = floor(temp/2);
        end
    end
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方法来提取。


http://www.kler.cn/a/16827.html

相关文章:

  • docker配置代理解决不能拉镜像问题
  • WordPress HTTPS 配置问题解决方案
  • 什么时候需要复写hashcode()和compartTo方法
  • Python提取PDF和DOCX中的文本、图片和表格
  • 什么岗位需要学习 OpenGL ES ?说说 3.X 的新特性
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • 至少要吃掉多少糖果
  • HPDA的资料
  • 荔枝派Zero(全志V3S)制作 IMG 镜像文件
  • 兴寿镇“春踏青,兴寿行”特色旅游线路点靓辛庄
  • 【Python入门知识】NumPy数组迭代及连接
  • 2.rabbitMQ之交换机
  • 【SCI征稿】中科院2区SCI,CCF推荐,评职代表作首选快刊
  • LC正弦波振荡器【高频电子线路】【Multisim】
  • thread-最佳时间
  • BetaFlight统一硬件配置文件研读
  • PAT A1012 The Best Rank
  • iOS---iOS10适配iOS当前所有系统的远程推送
  • Ansible的基础了解
  • docker容器:本地私有仓库、harbor私有仓库部署与管理
  • 【Unity入门】24.碰撞检测
  • 滴水逆向三期笔记与作业——02C语言——02数据类型
  • JDBC详解(四):操作BLOB类型字段(超详解)
  • Python做个猫狗识别系统,给人美心善的邻居
  • matlab for循环详解
  • 其他自定义代码片段