You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
# 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 ;
} ;