Функции MATLAB в C++
Кто-нибудь знает ресурс, где мы можем получить бесплатные библиотеки C++ для функций MATLAB? Например, задачи линейной алгебры могут быть решены с использованием LAPACK и BLAS.
Кроме того, о MATLAB в.NET-проекте не может быть и речи - я говорю о прямых реализациях C++ популярных функций MATLAB (я пока не знаю, какие функции мне нужны в C++, но используемые функции не будут эзотерическими),
Есть предложения о таких ресурсах?
5 ответов
Я никогда не слышал о всеобъемлющем порте функциональности matlab для C++. Тем не менее, почти все, что делает Matlab, существует где-то в библиотеке C/C++, некоторые из них в моей голове:
- LAPACK, BLAS, вы уже упомянули об этом, и есть несколько хороших реализаций, наиболее известной (бесплатной) является ATLAS.
- БПФ реализован в Matlab через библиотеку FFTW
- Есть множество быстрых библиотек изображений с открытым исходным кодом, т.е. интерполяция, фильтрация.
- Существуют действительно хорошие библиотеки ООП-матриц, у Boost хорошая.
После этого хорошо выясните, что вам нужно, и есть большая вероятность, что кто-то реализовал это в C/C++.
Извините за возрождение старого вопроса, но в настоящее время я работаю над библиотекой C++ с открытым исходным кодом, которая точно отвечает на этот вопрос:
KeyCpp - это библиотека C++ с открытым исходным кодом, которая предоставляет MATLAB/Octave-подобный синтаксис нескольким полезным числовым методам, а также некоторые функции построения графиков. В настоящее время есть функции для eig
, ode45
, fft
, linsolve
, svd
, interp1
, plot
и многие другие общие функции MATLAB.
Хотя есть и другие (очень хорошие) библиотеки, которые предоставляют многие из этих функций (например, Armadillo, Eigen и т. Д.), Большинство из них не являются полными числовыми библиотеками, и большая часть их синтаксиса отличается от синтаксиса MATLAB. Хотя KeyCpp также еще не является полной числовой библиотекой (но постоянно совершенствуется!), Синтаксис настолько близок к MATLAB, насколько позволяет язык C++.
В KeyCpp, чтобы построить векторы t
а также y
мы используем следующий синтаксис: (перейдите сюда для более подробного примера)
#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 для большинства функций находится здесь
Внимательно прочитайте документацию по Matlab и изучите библиотеки DLL и другие компоненты, которые он устанавливает на жесткие диски. Я думаю, вы обнаружите, что Matlab использует версию BLAS для того, что делает BLAS, возможно, также LAPACK и другие.