2009-08-25 60 views
5

Có ai biết một nguồn tài nguyên mà chúng tôi có thể nhận được MIỄN PHÍ thư viện C++ cho các chức năng MATLAB không? Ví dụ, các vấn đề đại số tuyến tính có thể được giải quyết bằng cách sử dụng LAPACK và BLAS.Chức năng MATLAB trong C++

Ngoài ra, MATLAB trong dự án .NET nằm ngoài câu hỏi - tôi đang nói về việc triển khai C++ trực tiếp các hàm MATLAB phổ biến (Tôi không biết tôi cần hàm nào trong C++) nhưng các hàm được sử dụng sẽ không để được bí truyền).

Bất kỳ đề xuất nào về tài nguyên đó?

Trả lời

9

Tôi chưa bao giờ nghe nói về một cổng chức năng MATLAB toàn diện cho C++. Điều đó đang được nói, hầu như mọi thứ đều không tồn tại trong thư viện C/C++ ở đâu đó, một số ngoài đỉnh đầu của tôi:

  • LAPACK, BLAS, bạn đã đề cập đến điều này và có một vài triển khai tốt nhất đáng chú ý (miễn phí) một là ATLAS.
  • FFT được triển khai trong MATLAB thông qua thư viện fftw
  • Có vô số thư viện hình ảnh nguồn mở nhanh ngoài đó, ví dụ: nội suy, lọc.
  • Có những thư viện ma trận OOP thực sự tốt, boost có một thư viện đẹp.

Sau đó, tìm hiểu xem bạn cần gì và có cơ hội tốt để người nào đó triển khai trong C/C++.

+0

+1 cho ma trận tăng. Bạn có bất kỳ gói nội suy nào có thể thực hiện các chức năng tương tự như griddata không? – Jacob

+0

http://www.scimath.com/ có một số chức năng khá tốt, không đặc biệt là griddata, nhưng với nội suy 3-d bạn có thể sử dụng chức năng griddata khá dễ dàng. – DeusAduro

5

Tôi cũng thích

  • Armadillo (templated Thư viện C++)
  • Eigen (khác templated Thư viện C++)
  • Newmat (một già nhưng cũng thử nghiệm C++ ma trận thư viện)

Ngoài ra, câu hỏi ban đầu của bạn không thực sự đủ cụ thể để có con trỏ tốt hơn.

+1

+1 cho armadillo: chuyển đổi cú pháp MATLAB thành C++: http://arma.sourceforge.net/docs.html#syntax – nkint

+0

Đồng ý !! Kể từ khi tôi viết câu trả lời, tôi thực sự "chuyển" một số mã Matlab bằng cách sử dụng Armadillo, làm cho nó dễ dàng hơn. Oh, và nhanh hơn rất nhiều vì nó là C++. –

2

Ngoài các đề xuất tốt đã được đưa ra, bạn cũng có thể nâng mã bạn cần từ mã nguồn của Octave hoặc Scilab. Tuy nhiên, cả hai đều có giấy phép GPL, có thể không phù hợp với nhu cầu của bạn.

0

Đọc tài liệu Matlab của bạn rất cẩn thận và có một poke xung quanh các DLL và các thành phần khác mà nó cài đặt trên đĩa cứng của bạn. Tôi nghĩ rằng bạn sẽ thấy rằng Matlab sử dụng một phiên bản BLAS cho những gì BLAS làm, có thể cũng LAPACK và những người khác.

4

Xin lỗi vì làm sống lại một câu hỏi cũ nhưng tôi hiện đang làm việc trên một mã nguồn mở C++ thư viện mà chính xác câu trả lời câu hỏi này:

KeyCpp là một mã nguồn mở C++ thư viện cung cấp cú pháp MATLAB/Octave giống như một số số hữu ích phương pháp và cũng có một số chức năng âm mưu. Hiện tại, có chức năng cho eig, ode45, fft, linsolve, svd, interp1, plot và nhiều chức năng MATLAB phổ biến khác.

Trong khi có các thư viện khác (rất tốt) cung cấp nhiều chức năng (như Armadillo, Eigen, vv), hầu hết không phải là thư viện số và hầu hết cú pháp của chúng không giống với cú pháp của MATLAB. Trong khi KeyCpp cũng chưa phải là một thư viện số hoàn chỉnh (nhưng đang cải thiện tất cả thời gian!), Cú pháp là gần gũi với MATLAB như ngôn ngữ C++ cho phép.

Trong KeyCpp, để vẽ các vectơ ty chúng ta sử dụng cú pháp sau: (Đi here cho một ví dụ mở rộng hơn)

#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.

Các chức năng của thư viện KeyCpp lợi dụng LAPACK, Gnuplot và odeint (từ Tăng cường). Các dự án nguồn mở sau đây đã được đưa vào thư viện này: Kiss FFT, Gnuplot-cpp.

Tài liệu Doxygen cho hầu hết các chức năng nằm ở here