aide de base numpy d'algèbre linéaire
-
22-08-2019 - |
Question
est ce que je dois faire -
J'ai cette équation -
Ax = y
où A est une matrice logique m * n (m <= n), et x et y sont des vecteurs de la bonne taille. Je sais que A et y, je ne sais pas ce que x est égal à. je sait aussi qu'il n'y a pas x où Ax est exactement égale à y. Je veux trouver le vecteur x « tel que Ax » est aussi proche que possible y. Ce qui signifie que (Ax » - y) est aussi proche que possible de (0,0,0, ... 0)
.Je sais que je dois utiliser la fonction lstsq: http://www.scipy.org/doc/numpy_api_docs/ numpy.linalg.linalg.html # lstsq
ou la fonction SVD: http://www.scipy.org/doc/numpy_api_docs/ numpy.linalg.linalg.html # SVD
Je ne comprends pas la documentation du tout. Quelqu'un peut-il s'il vous plaît montrer moi comment utiliser ces fonctions pour résoudre mon problème.
Merci beaucoup !!!
La solution
SVD est le cas de m Les documents pour lstsq ne semblent pas très utiles. Je crois que ce raccord moins carré, dans le cas où m> n. Si m
Autres conseils
Le documentation mise à jour peut être un peu plus utile ... ressemble vous voulez
numpy.linalg.lstsq(A, y)
Le SVD de la matrice A vous donne des matrices orthogonales U et de la matrice V et diagonale Σ telle que
A = U Σ V T
où U U T = I ; V V T = I
Par conséquent, si
x A = y
puis
x U Σ V T = y
x U Σ V T V = y V
x U Σ = y V
U T x Σ = y V
x Σ = U y V
x = Σ -1 U T y V
x = V T Σ -1 U T y
Alors, étant donné SVD de vous pouvez obtenir x .
Bien que pour les matrices générales AB ! = BA , il est vrai pour le vecteur x x U = = U T x .
Par exemple, considérons x = (x, y), U = (a, b; c, d):
x U = (x, y) (a, b; c, d)
= (xa + yc, xb + yd)
= (ax + cy, bx + dy)
= (a, c; b, d) (x, y)
= U T x
Il est assez évident quand on regarde les valeurs x U étant les produits de point de x et les colonnes de U , et les valeurs de U T x étant les produits scalaires de la x et les rangées U T , et la relation de rangées et de colonnes dans la transposition