2009-08-25 5 views
5

Кто-нибудь знает ресурс, где мы можем получить БЕСПЛАТНО Библиотеки C++ для функций MATLAB? Например, проблемы линейной алгебры могут быть решены с использованием LAPACK и BLAS.Функции MATLAB в C++

Кроме того, MATLAB в .NET-проекте не может быть и речи - я говорю о прямых реализациях C++ популярных функций MATLAB (я не знаю, какие функции мне нужны в C++, но используемые функции не идут быть эзотерическим).

Любые предложения относительно таких ресурсов?

ответ

9

Я никогда не слышал о всеобъемлющем интерфейсе функций Matlab для C++. Это, как говорится, почти все MATLAB делает существует в библиотеке C/C++ где-то, некоторые с верхней части моей головы:

  • LAPACK, BLAS, вы уже упоминали эти, и есть несколько хороших реализаций, наиболее заметный (бесплатный) один есть ATLAS.
  • FFT реализован в Matlab через библиотеку fftw
  • Существует множество библиотек изображений с открытым исходным кодом, т.е. интерполяция, фильтрация.
  • Есть действительно хорошие библиотеки матриц ООП, boost имеет приятный.

После этого хорошо выясните, что вам нужно, и есть хороший шанс, что кто-то внедрил его в C/C++.

+0

+1 для повышающего матрицы. У вас есть пакеты интерполяции, которые могут выполнять функции, похожие на griddata? – Jacob

+0

http://www.scimath.com/ имеет довольно неплохую функциональность, а не специально griddata, но с 3-й интерполяцией вы можете легко реализовать функцию griddata. – DeusAduro

5

Я также хотел

  • Armadillo (шаблонный C++ Library)
  • Eigen (другая шаблонной библиотека C++)
  • Newmat (старый, но хорошо проверенный C++ матрицы библиотека)

Помимо этого, ваш оригинальный вопрос не является достаточно конкретным для лучших указателей.

+1

+1 для armadillo: преобразование синтаксиса matlab в C++: http://arma.sourceforge.net/docs.html#syntax – nkint

+0

Согласен! Поскольку я написал ответ, я фактически «портировал» некоторый код Matlab, используя Armadillo, что делает его довольно простым. О, и намного быстрее, так как это C++. –

2

Помимо приведенных хороших предложений, вы также можете поднять код, который вам нужен, из исходного кода Octave или Scilab. Тем не менее, обе они имеют лицензии на GPL-стиль, что может не соответствовать вашим потребностям.

0

Прочитайте документацию Matlab очень тщательно и соберите файлы DLL и другие компоненты, которые он устанавливает на ваших жестких дисках. Я думаю, вы обнаружите, что Matlab использует версию BLAS для BLAS, возможно, LAPACK и других.

4

Извините за возрождение старого вопроса, но я в настоящее время работаю над открытым исходным кодом C++ библиотеки, которая точно отвечает на этот вопрос:

KeyCpp является открытым исходным кодом C++ библиотеки, которая предоставляет MATLAB/Octave-подобный синтаксис несколько полезных числовой методы, а также некоторые функции построения графиков. В настоящее время существуют функции для eig, ode45, fft, linsolve, svd, interp1, plot и многие другие общие функции MATLAB.

Хотя есть и другие (очень хорошие) библиотеки, которые предоставляют многие из этих функций (такие как Armadillo, Eigen и т. Д.), Большинство из них не являются полными числовыми библиотеками, и большинство их синтаксиса несовместимы с синтаксисом MATLAB. Хотя KeyCpp также не является полной числовой библиотекой (но все время улучшается!), Синтаксис близок к MATLAB, как позволяет язык C++.

В KeyCpp, чтобы построить векторы t и y мы используем следующий синтаксис: (Go 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

Смежные вопросы