c - 使用 Matlab Coder 生成的算法进行生产

标签 c algorithm matlab matlab-deployment matlab-coder

我在 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)。

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

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

关于c - 使用 Matlab Coder 生成的算法进行生产,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38481619/

相关文章:

c - Open 在不同进程中返回相同的文件描述符

c - OpenGL代码显示不同大小的简单文本?

c - 从动态无符号字符数组中读取 double

algorithm - 两个 n 位数字相乘的最快算法是什么?

java - 如何在 Mac 版本的 MatLab 中使用命令 xlswrite?

matlab - 频率:在MATLAB中使用FFT的分贝图

matlab - 使用容器时出错。映射/值指定的键不在此容器中

c - 在 C 中通过引用传递

c++ - 为什么 std::nth_element 返回 N < 33 元素的输入 vector 的排序 vector ?

algorithm - 确定算法,用于计算线段从圆的内部到外部交叉的圆与圆相交的点