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.