使用Matlab编码器生成算法进行生产

时间:2016-07-20 12:41:28

标签: c algorithm matlab matlab-deployment matlab-coder

我在MATLAB中有一个很好的调优算法,可以在矩阵(ofcourse)上运行。我已经使用matlab编码器为这个算法生成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 个答案:

答案 0 :(得分:1)

如果您参考的函数调用是入口点函数,则可以在设置编码器时定义大小。运行编码器的最简单方法是使用“应用程序”中的GUI。 MATLAB中的菜单(或在控制台输入&#39;编码器)。指定入口点函数后,第2步是定义每个输入变量的类型和大小。

对于输入变量的每个维度(如果需要,可以有2个以上),您可以指定:

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

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

coder.varsize('myVariableName');

请记住,某些功能只能用于(带编码器)固定大小的输入。

富勒描述: http://uk.mathworks.com/help/fixedpoint/ug/defining-variable-size-data-for-code-generation.html#br9t627

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