#pragma once #include "Defines.h" #include "iAlgMath_global.h" // 矩阵伪逆求解方法之二:SVD算法 该方法只为参考,暂未启用 // SVD算法通常涉及到复杂的数学和数值分析技术。 // 本类实现了简化Jacobi迭代SVD算法的框架,它适用于任意大小的矩阵。 // 并在此基础上实现矩阵求逆(非方矩阵求逆问题)。 // 请注意,这个算法可能需要很多迭代才能收敛,并且没有进行优化以处理数值稳定性问题。 // 如果矩阵较大,本类不一定合适。 class I_ALGMATH_EXPORT zxAlgMatrixPsInvSVD { public: zxAlgMatrixPsInvSVD(); ~zxAlgMatrixPsInvSVD(); #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; };