【发布时间】:2009-08-25 18:12:47
【问题描述】:
有谁知道我们可以获得免费 MATLAB 函数的C++ 库的资源吗?例如,线性代数问题可以使用 LAPACK 和 BLAS 来解决。
此外,.NET 项目中的 MATLAB 是不可能的 - 我说的是流行 MATLAB 函数的直接 C++ 实现(我不知道我在 C++ 中需要哪些函数,但使用的函数不会是深奥的)。
对这些资源有什么建议吗?
【问题讨论】:
标签: c++ matlab visual-c++-2005
有谁知道我们可以获得免费 MATLAB 函数的C++ 库的资源吗?例如,线性代数问题可以使用 LAPACK 和 BLAS 来解决。
此外,.NET 项目中的 MATLAB 是不可能的 - 我说的是流行 MATLAB 函数的直接 C++ 实现(我不知道我在 C++ 中需要哪些函数,但使用的函数不会是深奥的)。
对这些资源有什么建议吗?
【问题讨论】:
标签: c++ matlab visual-c++-2005
【讨论】:
【讨论】:
很抱歉再次提出一个老问题,但我目前正在开发一个开源 C++ 库来准确回答这个问题:
KeyCpp 是一个开源 C++ 库,它为几种有用的数值方法和一些绘图功能提供类似于 MATLAB/Octave 的语法。目前有eig、ode45、fft、linsolve、svd、interp1、plot等许多常用的MATLAB函数。
虽然还有其他(非常好的)库提供了许多这些函数(例如 Armadillo、Eigen 等),但大多数都不是完整的数值库,并且它们的大部分语法与 MATLAB 的语法不同。虽然 KeyCpp 还不是一个完整的数值库(但一直在改进!),但其语法与 C++ 语言允许的 MATLAB 一样接近。
在 KeyCpp 中,要绘制向量 t 和 y,我们使用以下语法:(更广泛的示例转到 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
【讨论】:
仔细阅读您的 Matlab 文档,并了解它安装在硬盘上的 DLL 和其他组件。我想你会发现 Matlab 使用 BLAS 的一个版本来实现 BLAS 的功能,可能还有 LAPACK 和其他版本。
【讨论】: