如何给matlab coder装license

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何给matlab coder装license相关的知识,希望对你有一定的参考价值。

步骤挺多的。Matlab官方网站上曾经出过相关的在线研讨会,名字叫做“使用MATLABCoder从MATLAB生成C/C++代码”,大概有40分钟左右,注册的就可以看了。网址见参考资料~~~ 参考技术A MATLAB Coder 工具是 MathWorks 公司在 2011年推出的 Matlab2011a版本中推陈出新的产品,它可以将MATLAB 函数直接生成 C 代码。主要作用体现在一下几点。
1、集成: MATLAB算法变成源代码或者静态库,用于已有的C环境。
2、原型:MATLAB算法作为独立可执行文件。在没有MATLAB的环境下进行使用。
3、加速:是代码更高的效率执行,生成 MEX文件,使代码加速不同倍速。
4、实现:转成C/C++ ,代码用于嵌入式处理器。
本文主要介绍如何用MATLAB Coder将MATLAB代码转化为C/C++代码,并进行加速。
从MATLAB到C/C++步骤
1、 安装matlab2011a或者更新版本,下面例子以2013版本为基础介绍;
简单生成一个foo.m文件;
functionc = foo(a, b)%#codegen
%Thisfunction muliplies a and b
c =a * b
其中,%#codegen可以防止出现警告错误。
在命令窗口,输入mex -setup,选中一个存在的编译器,界面如下;

5、在命令窗口输入coder(图形界面),回车,弹出MATLABCoder Project对话框;
6、在New选项卡Name中输入一个工程名foo.prj;点击Ok,弹出MATLAB Coder MEX Function对话框;
7、单击变量a,选择Define by Example…,弹出MATLAB Coder Define by Example对话框,在MATLAB Expression中输入5,点击OK;同样变量b也进行相应操作,输入6;
8、 选中Build选项卡,Output type选项中我们可以选择输出类型,他可以生成MEX文件,动态链接库,静态链接库,可执行文件,为了看生成的C/C++ 代码,选择c/c++ Static Library;选中Generate code only;
9、 点击More settings,选择ALL Setting,找到Advanced,Language选择C++;

点击Build,进行编译;点击View report,弹出Code Generation Report对话框,MATLAB code下显示的是调用的MATLAB 函数,C code下可以看到生成的相关 .h .cpp 文件,此时,变量a、b、c会显示相应的变量信息,同时MATLAB会在目录下生成codegen文件夹,在这里面可以找到生成的 .h .cpp文件;

利用vs2008建立一个项目程序,将生成的相关文件foo.h、foo.cpp、rtwtypes.h、foo_types.h拷到相关目录下并添加到应用程序中;
编写main函数进行测试
#include"foo.h"
#include<iostream>
#include<conio>
usingnamespace std;
int main(void)

doublea = 0.0, b = 0.0, c = 0.0;
cin>>a>>b;
c =foo(a, b);
cout<<"c= "<<c<<endl;
getch();
return0;

MATLAB Coder:稀疏矩阵

【中文标题】MATLAB Coder:稀疏矩阵【英文标题】:MATLAB Coder: sparse matrix 【发布时间】:2014-04-24 20:43:41 【问题描述】:

MATLAB Coder 看起来很花哨,可以通过将代码转换为 C/C++ 或 MEX 来大大加快 MATLAB 代码的运行速度。但是它似乎不支持稀疏矩阵,或者 matlab 函数 sparse 这对于我的代码。有谁知道如何克服这个问题?非常感谢!

【问题讨论】:

编写自己的 mex 函数? 稀疏代码的计算核心不是已经用C写了吗?我不熟悉 Coder,但我怀疑它只会加速你自己的迭代代码。它不会加快对内置 MATLAB 代码的调用。 您也可以只为您的 MATLAB 代码部分生成 MEX 代码,这些代码不使用稀疏来加速这些部分。 【参考方案1】:

eigen library可以用来处理Matlab函数sparse,它是c语言的。

正如“libill”所说,您也可以只为您的 MATLAB 代码部分生成 MEX 代码,这些代码不使用稀疏来加速这些部分。

对于稀疏部分使用上述库。

【讨论】:

【参考方案2】:

我对 Matlab 编码器的理解可能是错误的,但我认为它是一种将您的 Matlab 代码转换为 C/C++ 代码的工具。我不确定性能优化是 Matlab 编码器的目标。

看看suitesparse。它是一个处理大量稀疏操作的 C 库。稀疏矩阵情况下的Matlab“\”运算符实际上使用suitesparse。所以我认为你修改 Matlab 生成的 C 代码可能更容易。

HTH

【讨论】:

【参考方案3】:

我只是不确定转换是什么意思。我假设您的意思是编写自己的 mex 函数。 稀疏包通常以不同的方式处理稀疏矩阵,Matlab 也有其独特的处理方式。 然而,他们大多使用 CSC(或 CSR)格式。 Matlab 也将矩阵保存为 CSC 格式。

您可以查看许多稀疏包的 mex 函数以了解它是如何完成的。 关键是 Matlab 不会让您在其稀疏数据结构中保存显式零。 不要尝试在 Matlab mex 函数上保存显式零。 Matlab 会让你窒息!

【讨论】:

以上是关于如何给matlab coder装license的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB Coder:稀疏矩阵

如何在 Matlab Coder 中为具有不同输入数量的函数定义输入类型?

如何使 Coder 工具包创建的 MEX 文件可供其他人使用

在 MATLAB Coder 中创建用于指定数组大小的常量

MATLAB 到 C++:MATLAB Coder 不支持 csvread()

MATLAB Coder 中的多态性