【问题标题】:MATLAB functions in C++ [closed]C ++中的MATLAB函数[关闭]
【发布时间】:2009-08-25 18:12:47
【问题描述】:

有谁知道我们可以获得免费 MATLAB 函数的C++ 库的资源吗?例如,线性代数问题可以使用 LAPACK 和 BLAS 来解决。

此外,.NET 项目中的 MATLAB 是不可能的 - 我说的是流行 MATLAB 函数的直接 C++ 实现(我不知道我在 C++ 中需要哪些函数,但使用的函数不会是深奥的)。

对这些资源有什么建议吗?

【问题讨论】:

    标签: c++ matlab visual-c++-2005


    【解决方案1】:

    我从未听说过将 matlab 功能全面移植到 C++。话虽这么说,matlab 所做的几乎所有事情都存在于某个地方的 C/C++ 库中,有些超出了我的想象:

    • LAPACK,BLAS,你已经提到了这些,并且有一些很好的实现,最著名的(免费)一个是ATLAS
    • FFT 在 matlab 中通过 fftw library 实现
    • 那里有大量的快速开源图像库,即。插值、过滤。
    • 那里有非常好的 OOP 矩阵库,boost 有一个不错的。

    在那之后,弄清楚你需要什么,很有可能有人已经用 C/C++ 实现了它。

    【讨论】:

    • +1 用于提升矩阵。有没有可以执行类似于 griddata 功能的插值包?
    • scimath.com 有一些相当不错的功能,不是特别是 griddata,但通过 3-d 插值,您可以相当轻松地实现 griddata 功能。
    【解决方案2】:

    我也喜欢

    • Armadillo(模板化 C++ 库)
    • Eigen(另一个模板化 C++ 库)
    • Newmat(一个较旧但经过良好测试的 C++ 矩阵库)

    除此之外,您最初的问题还不够具体,无法提供更好的指导。

    【讨论】:

    • +1 for armadillo:matlab 语法转换为 c++:arma.sourceforge.net/docs.html#syntax
    • 同意!!自从我写了答案后,我实际上使用 Armadillo“移植”了一些 Matlab 代码,这使它变得非常容易。哦,因为它是 C++,所以速度要快得多。
    【解决方案3】:

    很抱歉再次提出一个老问题,但我目前正在开发一个开源 C++ 库来准确回答这个问题:

    KeyCpp 是一个开源 C++ 库,它为几种有用的数值方法和一些绘图功能提供类似于 MATLAB/Octave 的语法。目前有eigode45fftlinsolvesvdinterp1plot等许多常用的MATLAB函数。

    虽然还有其他(非常好的)库提供了许多这些函数(例如 Armadillo、Eigen 等),但大多数都不是完整的数值库,并且它们的大部分语法与 MATLAB 的语法不同。虽然 KeyCpp 还不是一个完整的数值库(但一直在改进!),但其语法与 C++ 语言允许的 MATLAB 一样接近。

    在 KeyCpp 中,要绘制向量 ty,我们使用以下语法:(更广泛的示例转到 here

    #include <iostream>
    #include <keycpp/keycpp.h>
    using namespace keycpp;
    
    int main(int argc, char** argv)
    {
        // Lets create some data: y = sin(t)
        std::vector<double> t = linspace(-pi,pi,100);
        std::vector<double> y = sin(t);
    
        Figure h;
        h.plot(t,y,"-b");
        h.grid_on();
        h.legend({"Series 1"});
        h.title("Example Plot");
        h.xlabel("time");
        h.ylabel("y");
    
        return 0;
    }
    

    KeyCpp 库的功能利用了 LAPACK、Gnuplot 和 odeint(来自 Boost)。以下开源项目已纳入该库:Kiss FFT、Gnuplot-cpp。

    大部分功能的 Doxygen 文档位于 here

    【讨论】:

      【解决方案4】:

      除了已经给出的好建议之外,您还可以从OctaveScilab 的源代码中提取您需要的代码。不过,这两者都有 GPL 风格的许可证,这可能不适合您的需求。

      【讨论】:

        【解决方案5】:

        仔细阅读您的 Matlab 文档,并了解它安装在硬盘上的 DLL 和其他组件。我想你会发现 Matlab 使用 BLAS 的一个版本来实现 BLAS 的功能,可能还有 LAPACK 和其他版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-09-09
          • 1970-01-01
          相关资源
          最近更新 更多