2009-08-25 23 views
5

Qualcuno conosce una risorsa in cui è possibile ottenere LIBERE librerie C++ per le funzioni MATLAB? Ad esempio, i problemi di algebra lineare possono essere risolti usando LAPACK e BLAS.Funzioni MATLAB in C++

Inoltre, MATLAB in un progetto .NET è fuori questione - sto parlando di implementazioni C++ dirette delle funzioni MATLAB più diffuse (non so quali funzioni sono necessarie in C++ ma le funzioni utilizzate non vanno essere esoterico).

Qualche suggerimento su tali risorse?

risposta

9

Non ho mai sentito parlare di una porta completa di funzionalità MATLAB in C++. Detto questo, quasi tutto ciò che MATLAB non esiste all'interno di una libreria C/C++ da qualche parte, un po 'fuori dalla parte superiore della mia testa:

  • LAPACK, BLAS, già citato questi, e ci sono alcune buone implementazioni, il più notevole (gratis) uno è ATLAS.
  • FFT è implementato in MATLAB tramite la libreria fftw
  • Ci sono un sacco di librerie di immagini open source veloci là fuori, es. interpolazione, filtraggio.
  • Ci sono davvero delle buone librerie di matrice OOP, boost ha una bella.

Dopodiché, capisci bene di cosa hai bisogno e c'è una buona probabilità che qualcuno lo abbia implementato in C/C++.

+0

+1 per matrice boost. Avete pacchetti di interpolazione che possono eseguire funzioni simili a griddata? – Jacob

+0

http://www.scimath.com/ ha alcune funzionalità piuttosto buone, non specificamente griddata, ma con l'interpolazione 3-d è possibile implementare la funzionalità di griddata abbastanza facilmente. – DeusAduro

5

mi piace anche

  • Armadillo (biblioteca templato C++)
  • Eigen (un'altra libreria templato C++)
  • Newmat (un vecchio ma ben collaudato C++ library matrice)

Oltre a ciò, la tua domanda originale non è abbastanza specifica per indicazioni migliori.

+1

+1 per armadillo: conversione della sintassi matlab in C++: http://arma.sourceforge.net/docs.html#syntax – nkint

+0

Concordato !! Da quando ho scritto la risposta, ho effettivamente "portato" un codice Matlab usando Armadillo, il che lo rende molto più semplice. Oh, e molto più veloce dato che è C++. –

2

Oltre ai buoni suggerimenti già forniti, è anche possibile sollevare il codice necessario dal codice sorgente di Octave o Scilab. Entrambi hanno licenze in stile GPL, che potrebbero non essere adatte alle tue esigenze.

0

Leggi la documentazione di Matlab con molta attenzione e fai un giro attorno alle DLL e agli altri componenti che installa sui tuoi dischi rigidi. Penso che scoprirai che Matlab usa una versione di BLAS per ciò che BLAS fa, forse anche LAPACK e altri.

4

dispiace per rilanciare una vecchia questione, ma attualmente sto lavorando su una fonte di C aperta ++ libreria che risponde esattamente a questa domanda:

KeyCpp è una fonte C aperta ++ libreria che fornisce la sintassi MATLAB/Octave simile a diversi numerica utile metodi e anche alcune funzionalità di tracciamento. Attualmente ci sono funzioni per eig, ode45, fft, linsolve, svd, interp1, plot e molte altre funzioni comuni di MATLAB.

Mentre ci sono altre (molto buone) librerie che forniscono molte di queste funzioni (come Armadillo, Eigen, ecc.), La maggior parte non sono librerie numeriche complete e la maggior parte della loro sintassi è diversa dalla sintassi di MATLAB. Anche se KeyCpp non è ancora una libreria numerica completa (ma sta migliorando sempre!), La sintassi è simile a quella di MATLAB come consente il linguaggio C++.

In KeyCpp, per tracciare i vettori t e y usiamo la seguente sintassi: (Vai here per un più ampio esempio)

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

La funzionalità della biblioteca KeyCpp sfrutta LAPACK, Gnuplot e odeint (da Boost). I seguenti progetti open source sono stati incorporati in questa libreria: Kiss FFT, Gnuplot-cpp.

documentazione Doxygen per la maggior parte delle funzioni si trova here