2009-08-25 134 views
5

有谁知道我们可以获得的资源免费用于MATLAB函数的C++库?例如,线性代数问题可以使用LAPACK和BLAS来解决。另外,.NET项目中的MATLAB不存在问题 - 我正在讨论流行的MATLAB函数的直接C++实现(我不知道我在C++中需要哪些函数,但所用的函数并不是要深奥)。在C++中的MATLAB函数

有关这些资源的任何建议?

回答

9

我从来没有听说过C++的matlab功能的全面端口。话虽这么说,几乎所有的MATLAB做了C/C++库中存在的地方,一些从我的头顶:

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

之后,弄清楚你需要什么,并且很有可能有人用C/C++实现它。

+0

1升压矩阵。你有任何可以执行类似于griddata的函数的插值包吗? – Jacob 2009-08-25 18:28:39

+0

http://www.scimath.com/有一些相当不错的功能,不是特别的griddata,但是通过3-d插值,你可以非常轻松地实现griddata功能。 – DeusAduro 2009-08-25 18:33:11

5

我也喜欢

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

除此之外,你的原始问题对于更好的指针来说还不够具体。

+1

+1 for armadillo:matlab语法转换为C++:http://arma.sourceforge.net/docs.html#syntax – nkint 2012-02-08 00:54:06

+0

同意!自从我写了答案之后,我实际上使用Armadillo“移植”了一些Matlab代码,这使得它更容易。噢,而且它的速度比C++快得多。 – 2012-02-08 00:55:15

2

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

0

请仔细阅读您的Matlab文档,并对安装在您的硬盘上的DLL和其他组件进行详细说明。我想你会发现Matlab使用BLAS的版本,可能还包括LAPACK和其他版本。

4

对不起,振兴一个老问题,但我目前工作的一个开源C++库,正是回答了这个问题:

KeyCpp是一个开源C++库,提供MATLAB /倍频程的语法来几个有用的数值方法和一些绘图功能。目前有功能eig,ode45,fft,linsolve,svd,interp1,plot,和许多其他常见的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; 
} 

Plot output from example.

的KeyCpp库的功能需要的优势LAPACK,Gnuplot和odeint(来自Boost)。以下开源项目已被纳入此库:Kiss FFT,Gnuplot-cpp。

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