使用 Matlab Coder 生成算法进行生产

Posted

技术标签:

【中文标题】使用 Matlab Coder 生成算法进行生产【英文标题】:Using Matlab Coder generated algorithm for Production 【发布时间】:2016-07-20 12:41:28 【问题描述】:

我在 MATLAB 中有一个微调算法,可以在矩阵上运行(当然)。我已经使用 matlab coder 为这个算法生成了 c 代码,它按预期工作。

这是我在 Matlab 中使用的函数调用

x = B/A 

在哪里

B 大小为 1*500(行 * 列) A 的大小为 10*500 x,结果大小为1*10

使用 Matlab Coder 将其转换为 C 源代码时。我注意到函数定义接受与上述大小相同的参数。

void myfunction(const double B[500], const double A[5000], double x[10])

对于原型和测试目的,这似乎没问题。但是,在生产中,我更喜欢将此功能用于不同的尺寸。例如,上述变量中​​的 100 而不是 500 也应该起作用。如何在我的算法中消除对矩阵维度的依赖?

此外,有几行代码使用硬编码整数。比如有类似

的代码
if (rankR <= 1.4903363393874656E-8)
// Some internal function calls
else
// Usage of standard sqrt

500.0 * fabs(A[0]) * 2.2204460492503131E-16

谁能解释一下这些硬编码整数是什么?这些是从我在 MATLAB 中使用的测试数据生成的吗?

【问题讨论】:

【参考方案1】:

如果你引用的函数调用是入口函数,你可以在设置Coder时定义大小。运行 Coder 的最简单方法是使用 MATLAB 内“应用程序”菜单中的 GUI(或在控制台输入“coder”)。指定入口函数后,第 2 步是定义每个输入变量的类型和大小。

对于输入变量的每个维度(必要时可以超过 2 个),您可以指定:

 n  - dimension is exactly n long
:n  - dimension is up to n long
inf - dimension is unbounded

如果函数调用不是入口函数,并且隐藏在您的代码中(或者如果您从控制台运行 codegen 函数),您可以将变量显式定义为大小不一:

coder.varsize('myVariableName');

请记住,某些函数只能(通过 Coder)与固定大小的输入一起使用。

这里有更完整的描述: http://uk.mathworks.com/help/fixedpoint/ug/defining-variable-size-data-for-code-generation.html#br9t627

不幸的是,不确定随机常数。

【讨论】:

以上是关于使用 Matlab Coder 生成算法进行生产的主要内容,如果未能解决你的问题,请参考以下文章

如何给matlab coder装license

使用调用外部函数的函数加载由 MATLAB Coder 生成的 DLL

使用 Matlab Coder 将 Matlab m 文件转换为 C/C++ 代码,包括 mex 文件 (mxArray)

Matlab Coder生成的C代码的自动微分[关闭]

预期标量值:MATLAB Coder

MATLAB Coder:截断/连接元胞数组