gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:47 28 4
gpt4 key购买 nike

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

force=subfunction(displacement)

有一个 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 代码

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

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

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

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


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

最佳答案

提供几个尚未列出的选项:

  • 如果您使用 SAGE , 你可以 call both MATLAB and C code从一个脚本。您可能必须将 C 代码包装在 Cython 中,但这很容易。从技术上讲,您不会从 C 调用 MATLAB,而是从第三个脚本调用 MATLAB 和 C,但结果是一样的。

  • 如果您愿意将 MATLAB 翻译成非常相似的 Numpy脚本,你可以使用 Cython 来编译复杂的代码并非常干净地集成它们。这些翻译我已经做过好几次了,这是一个非常轻松的过程。

关于c - 在 C 程序中启动 matlab 代码的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18641451/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com