Ubuntu下C++基于eigen库SVD矩阵奇异值分解效率分析
来源:互联网 发布:isis 剿灭 知乎 编辑:程序博客网 时间:2024/05/17 07:26
在优化求解问题中,经常要用到矩阵奇异值的SVD分解。
运行结果:
奇异值分解 (singularvalue decomposition,SVD)是一种可靠地正交矩阵分解法,它比QR分解法要花上近十倍的计算时间。
使用SVD分解法的用途是解最小平方误差法和数据压缩。
在Ubuntu下基于eigen C++库测试了eigen SVD算法的性能,即SVD求解最小二乘/伪逆,代码如下:
//compile: g++ test_svd.cpp#include <iostream>#include <Eigen/Dense>#include <sys/time.h> using namespace std;using namespace Eigen;long getCurrentTime() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec * 1000 + tv.tv_usec / 1000; } int main(){for(int i = 1; i < 5; i++) {cout << "A[5000, " << i * 20 << "]X=b" << endl;long t1 = getCurrentTime();MatrixXf A = MatrixXf::Random(5000, 20 * i);//cout << "A矩阵:\n" << A << endl;VectorXf b = VectorXf::Random(5000);//cout << "右侧b向量:\n" << b << endl;//cout << "最小均方值为:\n" << A.jacobiSvd(ComputeThinU | ComputeThinV).solve(b);long t2 = getCurrentTime();cout << t2 - t1 << endl;}return 0;}
运行结果:
A[5000, 20]X=b
186
A[5000, 40]X=b
702
A[5000, 60]X=b
1573
A[5000, 80]X=b
2805
0 0
- Ubuntu下C++基于eigen库SVD矩阵奇异值分解效率分析
- svd矩阵奇异值分解
- SVD矩阵奇异值分解
- 矩阵奇异值分解(SVD)
- SVD奇异值分解分析
- 矩阵奇异值分解(SVD)
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 矩阵奇异值分解(SVD)及其应用
- 奇异值、奇异矩阵、SVD分解、正交矩阵定义解释
- 奇异值、奇异矩阵、SVD分解、正交矩阵
- 奇异值、奇异矩阵、SVD分解、正交矩阵定义解释
- 奇异值、奇异矩阵、SVD分解、正交矩阵(转载)
- 奇异值、奇异矩阵、SVD分解、正交矩阵
- SVD奇异值分解
- SVD奇异值分解
- Ehlert Drive SnapShot v1 43 17635 Incl Keymaker-CORE
- Objective-C内存管理之引用计数(一)
- Ehlert Drive SnapShot Portable v1 43 17635 Incl Keymaker-CORE
- Ehlert Drive SnapShot Portable v1 43 17634 x64 Incl Keymaker-CORE
- 多线程编程 - GCD
- Ubuntu下C++基于eigen库SVD矩阵奇异值分解效率分析
- 线段树的一些题和对应的做法
- C#将图形快速处理成不规则区域
- refactor : switch-case
- vb.net中彩色图像数据的快速获取
- 一维图像数据数组处理应该注意的几个问题
- 几种经典的二值化方法及其vb.net实现
- hbase和虚拟机开发
- NYOJ 733 万圣节派对(abs函数的认识)