2016-06-11 3 views

Répondre

4

orth utilise le singular value decomposition. La définition de orth vit actuellement à https://github.com/scipy/scipy/blob/master/scipy/linalg/decomp_svd.py, et que j'écris ceci, le code complet pour orth (laissant tomber le docstring) est:

def orth(A): 
    u, s, vh = svd(A, full_matrices=False) 
    M, N = A.shape 
    eps = numpy.finfo(float).eps 
    tol = max(M, N) * numpy.amax(s) * eps 
    num = numpy.sum(s > tol, dtype=int) 
    Q = u[:, :num] 
    return Q 

Le résultat est que les valeurs singulières moins de tol sont considérés comme 0, et ces directions ne sont pas considérées comme faisant partie de la plage A. tol est une tolérance relative: elle est définie sur max(M, N)*eps fois la valeur singulière maximale de A, où eps est la machine epsilon à virgule flottante.

orth fournit aucun argument pour contrôler comment tol est calculé, mais comme vous pouvez le voir, la fonction n'est que de quelques lignes. Si vous souhaitez utiliser une méthode différente pour décider quelles valeurs singulières ignorer, vous pouvez utiliser orth comme point de départ pour écrire votre propre fonction.