Извините за возрождение старого вопроса, но я в настоящее время работаю над открытым исходным кодом 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;
}
Функциональность библиотеки KeyCpp использует преимущества LAPACK, Gnuplot и odeint (от Boost). В эту библиотеку были включены следующие проекты с открытым исходным кодом: Kiss FFT, Gnuplot-cpp.
Doxygen документация для большинства функций находится here
+1 для повышающего матрицы. У вас есть пакеты интерполяции, которые могут выполнять функции, похожие на griddata? – Jacob
http://www.scimath.com/ имеет довольно неплохую функциональность, а не специально griddata, но с 3-й интерполяцией вы можете легко реализовать функцию griddata. – DeusAduro