5

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

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

有关此类资源的任何建议?

4

5 回答 5

9

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

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

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

于 2009-08-25T18:20:32.503 回答
5

我也喜欢

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

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

于 2009-08-25T18:37:50.127 回答
4

很抱歉重新提出一个老问题,但我目前正在开发一个开源 C++ 库,该库可以准确回答这个问题:

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

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

在 KeyCpp 中,要绘制向量ty我们使用以下语法:(点击此处查看更广泛的示例)

#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 文档位于此处

于 2013-08-23T21:57:54.717 回答
2

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

于 2009-08-26T10:31:27.523 回答
0

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

于 2009-08-26T13:13:03.897 回答