首先,我是C++的新手。
我正在为我的硕士论文写一个程序,其中的一部分是以递归的方式解决回归问题。
我想解决以下问题:
Ax = y在我的例子中,计算速度是不可忽略的,这就是我想知道Boost::BLAS是否使用
x = (A^T A)^{-1}A^Ty将比Lapackpp (我使用gentoo)需要更少的计算时间。
附注:我能够在Lapackpp项目中找到site Class文档,但找不到示例。如果Lapack比Boost::BLAS快,有人能给我一些例子吗?
谢谢
发布于 2011-01-21 06:47:22
从数值分析的角度来看,您永远不会想要编写这样的代码
的法方程矩阵(A^T A
与直接解决相同问题的替代方案相比,这两种方案的工作量更大,准确性更差(而且可能更不稳定)。
每当你看到一些数学显示矩阵求逆时,应该理解为“解线性方程组”,或者分解矩阵并使用因式分解来求解系统。BLAS和Lapack都有这样做的例程。
类似地,对于回归,调用一个计算回归的库函数,或者阅读如何自己计算回归。正规方程式方法是教科书上错误的方法。
发布于 2011-01-04 02:48:38
高级接口和低级优化是两码事。
LAPACK和uBLAS提供了高级接口和未经优化的低级实现。硬件优化的低级例程(或绑定)应该来自其他地方。一旦提供了绑定,LAPACK和uBLAS就可以使用优化的低级例程,而不是它们自己的未优化实现。
例如,ATLAS提供了优化的低级例程,但仅限于高级(3级BLAS等)接口。您可以将ATLAS绑定到LAPACK。然后,LAPACK将使用ATLAS进行低级工作。可以将LAPACK看作是一名高级经理,将技术工作委托给经验丰富的工程师(ATLAS)。uBLAS也是如此。您可以绑定uBLAS和MKL。结果将是优化的C++库。查看文档并使用google了解如何做到这一点。
发布于 2011-01-21 04:55:45
你真的需要用C++实现吗?例如,python/ numpy会是你的替代方案吗?对于递归回归(最小二乘),我会推荐去看麻省理工学院斯特朗教授关于线性代数的演讲和/或他的书。
https://stackoverflow.com/questions/4575482
复制相似问题