我在 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])
出于原型(prototype)和测试目的,这似乎没问题。但是,在生产中,我更喜欢将此功能也用于不同的尺寸。例如,上述变量中的 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 中使用的测试数据生成的吗?
最佳答案
如果你引用的函数调用是入口函数,你可以在设置Coder时定义大小。运行 Coder 的最简单方法是使用 MATLAB 中“Apps”菜单中的 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)。
不幸的是,不确定随机常数。
关于c - 使用 Matlab Coder 生成的算法进行生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481619/