2016-07-20 38 views
1

我有一个很好的调整算法在MATLAB上运行矩阵(ofcourse)。我已经使用matlab编码器为该算法生成c代码,并按预期工作。使用Matlab编码器生成算法生产

这里的一个函数调用我在Matlab中使用

x = B/A 

其中

  • B是尺寸为1×500(行×列)
  • A是大小为10的* 500
  • x,结果大小为1 * 10

使用Matlab编码器将其转换为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

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

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

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

如果函数调用不是入口点函数和被埋没内你的代码(或如果您正在从控制台代码生成功能),可以显式定义变量为不同大小的:

coder.varsize('myVariableName'); 

记住,有些功能只能用于(带编码器)与fixe d尺寸的输入。

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

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