#pragma once #include "Defines.h" #include "iAlgMath_global.h" // SVD算法通常涉及到复杂的数学和数值分析技术。 // 本类实现了简化Jacobi迭代SVD算法的框架,它适用于任意大小的矩阵。 // 并在此基础上实现矩阵求逆(非方矩阵求逆问题)。 // 请注意,这个算法可能需要很多迭代才能收敛,并且没有进行优化以处理数值稳定性问题。 // 如果矩阵较大,本类不一定合适。 class I_ALGMATH_EXPORT zxAlgSVD { public: zxAlgSVD(); ~zxAlgSVD(); #ifdef QT_DEBUG void test(); #endif public: // 计算伪逆矩阵 VVecDouble pseudoInverse(VVecDouble& A); private: // svg bool svd(VVecDouble& A); // sqrt(a^2 + b^2) without under/overflow double hypot(double a, double b); private: // 缓存 VVecDouble U; VVecDouble V; VecDouble s; int m; int n; };