1

我目前正在做一个 C++ 项目,我实际上对使用 Matlab 数据结构感兴趣,而不必创建自己的数据类型(如矩阵、数组等)

有没有办法在 C++ 中无缝使用 Matlab 对象?我不介意在我的程序运行时在后台运行 Matlab。

编辑:起点是: http: //www.mathworks.co.uk/help/matlab/calling-matlab-engine-from-cc-and-fortran-programs.html。我会继续阅读这篇文章。

4

4 回答 4

4

您可以改用 Armadillo C++ 数学库;被 NASA、波音、西门子、德意志银行、麻省理工学院、CMU、斯坦福大学等使用。

如果您更熟悉 MATLAB/OCTAVE http://arma.sourceforge.net/docs.html#syntax ,他们有很好的文档和示例

我更喜欢使用某种原生 C++ 库而不是 Matlab。对于开发和执行而言,这可能会更快。

于 2014-02-21T22:11:50.513 回答
2

通过为 Matlab 编写 C++ 扩展,我学到了一件事:在 C++ 中使用 Matlab 对象可能会让您非常头疼。

Matlab 数据结构不作为 C++ 类公开。相反,您会获得可以使用类 C API 函数操作的指针。

我建议使用本机 C++ 库,例如Eigen3

于 2014-02-21T19:06:00.253 回答
1

您正在查看的功能并不是真正打算用作无缝对象。在过去,当我使用它时,我发现使用原生数组或第三方矩阵库来做 C 部分要简单得多,然后将其转换为 Matlab 矩阵以返回。

混合 Matlab 和 C++ 通常通过以下两种方式之一完成:

  1. 有一个 C++ 程序调用 Matlab 来做一些专门的处理。这主要用于复杂矩阵算法的快速开发。您可以通过调用完整的 Matlab 引擎来做到这一点,或者将您的 Matlab 代码片段打包到一个共享库中进行分发。(分布式版本打包了 Matlab 运行时的可分发副本,该副本与您的脚本一起调用)。

  2. 让 Matlab 脚本调用 C++ 函数来进行一些专业处理。这通常用于嵌入算法的 C++ 实现(例如机器学习模型)或处理特定的优化。

这两个用例在向/从 Matlab 传输数据时都会产生一些开销。

如果您只是在寻找一些要在 C++ 中使用的矩阵代码,那么最好查看各种 C++ 矩阵库,例如在Boost中实现的那个。

于 2014-02-21T20:24:09.293 回答
1

您可以使用 C++ 和 Matlab 进行混合编程。有两种可能的方式:

  1. 直接调用 MATLAB 引擎:有关详细信息,请参阅此帖子。Matlab 将在后台运行。

  2. 将 MATLAB 分发到独立的共享库中:在此处查看如何执行此操作(带有详细步骤和示例)。

于 2014-02-21T19:04:34.110 回答