在C例程中启动matlab代码的最有效方法
作为我硕士论文的一部分,我正在为MBS软件编写一个外部C-子程序,以便作为力元素工作,例如:在C例程中启动matlab代码的最有效方法,c,matlab,matlab-compiler,matlab-coder,C,Matlab,Matlab Compiler,Matlab Coder,作为我硕士论文的一部分,我正在为MBS软件编写一个外部C-子程序,以便作为力元素工作,例如: force=subfunction(displacement) 有一个Matlab代码在做这件事,用C实现它非常耗时 因此,我认为以下选项是克服这一问题最有效的方法: 一,。使用Matlab编译器创建.exe并从C启动 非常好的解决方案。然而,问题是mbs解算器调用函数的次数>10000次,编译的Matlab可执行文件每次都必须加载MCR(Matlab编译器运行时)!处理时间非常短(~0.001秒),
force=subfunction(displacement)
有一个Matlab代码在做这件事,用C实现它非常耗时
因此,我认为以下选项是克服这一问题最有效的方法:
一,。使用Matlab编译器创建.exe并从C启动
非常好的解决方案。然而,问题是mbs解算器调用函数的次数>10000次,编译的Matlab可执行文件每次都必须加载MCR(Matlab编译器运行时)!处理时间非常短(~0.001秒),但每个迭代步骤加载MCR大约需要5秒(!)。不幸的是,这使得这个选项对我来说毫无用处
“每次启动编译后的可执行文件时,实际上都会启动另一个MATLAB实例。”
二,。使用Matlab编译器创建共享库等
我还没试过这个。据我所知,对于这些选项,MCR也必须像选项1一样每一步都启动
三,。使用Matlab编码器生成C代码
就我有时尝试的那样,这不是一个容易的选择。应该优化生成的代码。它真的会更有效率吗
四,。仅在第一次启动Matlab可执行文件时,不关闭它并通过任何文件传递C代码
只是一个概念:我想开始Matlab Exe。在第一个迭代步骤中,让我们编写一个包含“置换”内容的文件。然后,如果有任何新值出现,我会每秒扫描一次Matlab中的文件。我将处理它并写入另一个文件,每毫秒扫描一次结果文件的C例程将找到新值并继续工作
我可以想象这工作得更快,但在没有bug之前,实现起来肯定有点棘手
非常感谢您提供有关您的经验或想法的任何报告。提供一些尚未列出的选项:
- 如果使用,则可以从单个脚本执行。您可能需要将C代码打包,但这相当简单。从技术上讲,您不会从C调用MATLAB,而是从第三个脚本调用MATLAB和C,但结果是相同的
- 如果您愿意将MATLAB翻译成一个非常类似的脚本,那么可以使用Cython编译复杂的代码,并将其非常干净地集成在一起。我已经做了几次这些翻译,这是一个相当轻松的过程