问题标签 [matlab-coder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1910 浏览

matlab - 为 Matlab Coder 定义可变大小的输入数据

我正在尝试使用 Matlab 编码器从 .m 文件生成一个 mex 代码文件。代码是

对于固定大小,我可以使用它

如何在不限制 A 和 x 大小的情况下做到这一点?

0 投票
2 回答
4634 浏览

c - 如何将 float[][] 类型数组转换为“emxArray_real_T *x”

我已经使用 MatlabCoder 转换了一个函数,该函数将 NxN 矩阵作为输入并将 NxN 矩阵输出从 matlab 到 C。它给了我一个有两个参数的函数,即

我知道 x 是函数的输入,我可以从 y 获得函数的输出。问题是我在 float[][] 中有一个数组,我希望将此数据作为 func 的输入,它仅将 emxArray_real_T *x 作为输入。

关于如何将此 float[][] 数据转换为 emxArray_real_T *x 的任何想法

emxArray_real_T 有这个结构

0 投票
1 回答
429 浏览

c - matlab c 嵌入式编码器代码

将此代码与 min 函数进行比较以获得 h 或 u1 的最小值,谁能告诉我为什么 matlab 会生成这样的语法?为什么是while循环,虽然我在while块内看不到任何变化!

matlab代码

注意 max min 函数有两个循环

0 投票
1 回答
206 浏览

c - 在 C-Routine 中启动 matlab 代码的最有效方法

作为我硕士论文的一部分,我正在为 MBS 软件编写一个外部 C 子程序,以便作为一个力元件工作,例如:

有一个 Matlab 代码执行此操作,并且在 C 中实现它非常耗时。

因此,我认为以下选项是克服此问题的最有效方法:

1. 使用 Matlab-Compiler 创建一个 .exe 并从 C 启动它

非常好的和简单的解决方案。然而问题是 mbs-solver 调用函数 >10000 次,并且编译的 Matlab 可执行文件必须每次都加载 MCR(Matlab 编译器运行时)!处理时间非常短(~0.001 秒),但每个迭代步骤的 MCR 加载大约需要5 秒(!)。不幸的是,这使得这个选项对我来说毫无用处。

http://www.mathworks.de/support/solutions/en/data/1-1ARNS/

“每次你启动一个已编译的可执行文件,你实际上是在启动另一个 MATLAB 实例。”

2. 使用 Matlab-Compiler 创建共享库等。

我没试过这个。据我研究,我了解到对于这些选项,MCR 也必须像选项 1 一样每一步都启动。

3. 使用 Matlab-Coder 生成 C-Code

就我有时尝试过的而言,这不是一个简单的选择。应优化生成的代码。真的会更有效率吗?

4. 仅第一次启动 Matlab-Executable 而不关闭它并通过任何文件传递 C 代码

只是一个概念:我想启动 Matlab-Exe。在第一个迭代步骤中,让我们编写一个内容为“位移”的文件。然后,如果有任何新值出现,我会每毫秒扫描一次来自 Matlab 的文件。我会处理它并写入另一个文件,每毫秒扫描结果文件的 C-Routine 会找到新值并继续工作。

我可以想象这工作得更快,但在它没有错误之前实施起来肯定有点棘手。


我感谢任何有关您的经历或想法的报告。

0 投票
5 回答
8122 浏览

matlab - Matlab 编码器 - 需要一个标量。IF 或 WHILE 不支持非标量

我有以下matlab代码v是一维数组。

这工作正常,但是当我尝试在 matlab 编码器中将其转换为 ac 代码时,出现以下错误: Expected a scalar. Non-scalars are not supported in IF or WHILE statements, or with logical operators. Instead, use ALL to convert matrix logicals to their scalar equivalents.

我对 matlab 数据类型并不完全熟悉,也许是我遗漏了什么的原因。

0 投票
1 回答
783 浏览

multithreading - Matlab在使用codegen和parfor时什么时候选择线程

我似乎是少数使用 Matlab 编码器(codegen 命令)来获得加速的人之一,从在线讨论或帮助如此之少的事实来看。在某些情况下,我从中获得了令人难以置信的加速。我从未见过它记录在案,但是当我使用带有 parfor 循环的 Matlab 脚本中的 codegen 制作 MEX 文件时,它通常会将生成的 MEX 线程化。函数中的 Parfor 会产生多个进程,这通常比线程效率低(我通过在 linux 中观察 top 并在 Matlab 函数中看到多个 100% 进程来推断所有这些,但在运行转换后的 MEX 时只有一个,例如 1000% 进程)。我现在正在研究一个我可以真正使用加速的案例,但我没有看到 MEX 中使用了多个线程的证据,即使 parfor 在基本函数中工作。

0 投票
2 回答
561 浏览

matlab - 矩阵编码器不支持下标为空矩阵

我有一个matlab文件,工作正常,

我正在尝试使用自动编码器对其进行转换,但是出现错误,

??? Subscripting into an empty matrix is not supported.

然后我尝试在循环之前声明它,因为我收到了一个错误: ??? Undefined function or variable 'flowDt'.'

现在我不知道是什么导致了这个问题: ??? Subscripting into an empty matrix is not supported.

0 投票
1 回答
59 浏览

matlab - matlab比较差异

if tf < max(arr)比。if all(tf < max(arr))

  1. 他们有什么区别
  2. 推荐哪一个。
  3. 它们完全等效吗?

使用 matlab 编码器和第一个编码器时出现错误!

编辑

我有

并考虑将其更改为

因为matlab编码器抱怨不是每个元素都是1X1 double variable

0 投票
1 回答
862 浏览

c - 如何使用 Embedded Coder 在 MATLAB 中内联 Level-2 .m S-Function

我正在尝试将现有的已编译 C 库(Windows x64 上的 .dll)与 Simulink 一起使用。我已经编写了一个基本库以及必要的 2 级 S-Function(.m 文件)和代码生成翻译文件(.tlc)。我的代码在模拟中运行良好,并且代码生成执行没有错误,尽管我在 .tlc 文件中指定的自定义代码都没有最终出现在输出中。但是,如果我的任何 .tlc 文件中存在语法错误,代码生成就会失败,因此它至少会解析文件。参考代码生成的示例代码并没有发现我似乎遗漏的任何内容。

考虑到这里的文件数量和代码量,我把所有东西都放进去了了 Github 存储库中。如果您在运行 x64 MATLAB 2011b 或更新版本的 Windows 上,您应该能够立即运行所有内容。中的最终输出TestLibTest_grt_rtw/TestLibTest.c:TestLibTest_output()应包含对TestLibGet()TestLibGet.tlc 指定的两个调用。

0 投票
2 回答
1182 浏览

c# - Matlab Coder - 从 .m 文件生成 EXE

我的主要目标是将用 matlab(.m) 编写的代码与另一个 c# 应用程序集成。我考虑了2个选项:

  1. 使用 Matlab Builder NE
    • 优点:用着用!
    • 缺点:需要我目前没有的许可证($$)。需要在最终用户 PC 上安装 MCR。
  2. 从 .m 文件生成独立的 EXE 文件
    • 优点:不需要任何东西来运行。
    • 缺点:新手很难使用。不支持所有功能。

到目前为止,我正在尝试对选项 2) 进行“概念证明”,但没有成功。我什至不知道如何开始我的问题;一旦我对工具箱有了更多的了解,我就会改进我的问题。如果问题不符合标准,请通知我。

  1. Matlab Coder、Real-Time Workshop(RTW)和RTW Embedded Coder之间有什么关系?我确定我有两个 RTW 许可证,但我不确定我是否有“Matlab Coder”
  2. 我正在尝试使用“emlc”命令生成 EXE。这是正确的命令吗?我无法让它工作。我正确生成了 C/C++ 代码,但没有生成 EXE(我已经配置了 MEX 设置)
  3. 由“emlc”生成的 C/C++ 代码可以导入 Visual Studio 以编译和构建 EXE?是不是超级简单?
  4. “Emlc”属于哪个工具箱?
  5. %#codegen 指令代表什么?
  6. 想象一下,我在一个 .m 文件中有 2 个函数(函数 A、函数 B)。还想象一下,我能够生成 EXE。exe的入口点是什么?是functionA还是functionB?如何定义数据类型?