作为我硕士论文的一部分,我正在为 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-Code
就我有时尝试过的而言,这不是一个简单的选择。应优化生成的代码。真的会更有效率吗?
4. 仅第一次启动 Matlab-Executable 而不关闭它并通过任何文件传递 C 代码
只是一个概念:我想启动 Matlab-Exe。在第一个迭代步骤中,让我们编写一个内容为“位移”的文件。然后,如果有任何新值出现,我会每毫秒扫描一次来自 Matlab 的文件。我会处理它并写入另一个文件,每毫秒扫描结果文件的 C-Routine 会找到新值并继续工作。
我可以想象这工作得更快,但在它没有错误之前实施起来肯定有点棘手。
我感谢任何有关您的经历或想法的报告。