Функции 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++.

Мне также нравится

  • Armadillo (шаблонная библиотека C++)
  • Eigen (другая шаблонная библиотека C++)
  • Newmat (старая, но хорошо протестированная матричная библиотека 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 для большинства функций находится здесь

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

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

Другие вопросы по тегам