Améliorer une matrice mal conditionnée
J'ai une matrice mal conditionnée, dont rcond()
est proche de zéro, et par conséquent, à l'inverse de cette matrice n'est pas venu pour être correct. J'ai essayé d'utiliser pinv()
mais ça ne résout pas le problème. C'est de cette façon que je prends l'inverse:
X = (A)\(b);
J'ai cherché une solution à ce problème et trouvé ce lien (dernière solution) pour l'amélioration de la matrice. La solution, il suggère d'utiliser cette:
A_new = A_old + c*eye(size(A_old));
Où c > 0
. La mesure d'employer cette technique fonctionne dans la fabrication de la matrice A
mieux conditionné et la solution résultante a l'air mieux. Cependant, j'ai étudié à l'aide de différentes valeurs de c
et la solution résultante dépend de la valeur de choisi c
.
D'autres qu'à la main en train d'étudier pour la valeur de c
est-il une manière automatique grâce auquel je peux trouver la valeur de c
pour laquelle je obtenir la meilleure solution?
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Discret dans la théorie inverse, l'ajout d'une faible valeur
c
à la diagonale de la matriceA
sur le point d'être renversé, est appelé amortissement de l'inversion et la faible valeur ajoutéec
est appelé Marquardt-Levenberg coefficient. Parfois, la matrice A a zéro ou proche de zéro les valeurs propres, en raison de laquelle la matrice devient singulier; l'ajout d'une faible coefficient d'amortissement pour les éléments de la diagonale rend stable.Plus grande est la valeur de
c
, plus grand est l'amortissement, votre inversion de matrice est plus stable, mais vous êtes loin de la vraie solution.Plus petite est la valeur de
c
, plus petite est l'amortissement, est plus proche de votre matrice inversée à la véritable matrice inversée, mais il risque de devenir instable.Un "amortissement adaptatif" technique parfois utilisée est - démarrer avec un test de la valeur de
c
, inverser la matriceA
, puis diminuer la valeur de c, ne l'inversion de nouveau et ainsi de suite. arrêtez-vous lorsque vous obtenez bizarre valeurs dans la matrice inversée en raison deA
devenir singulier encore, de façon très grand nombre.Je pense que ce n'est pas exactement la réponse à votre question, mais c'était trop long pour le mettre dans un commentaire.
Comme l'a déjà souligné dans les commentaires, la réponse à votre question dépend essentiellement de votre application. Peut-être l'ajout d'un petit multiple de la matrice identité est la bonne chose à faire, peut-être pas. Afin de déterminer que vous avez besoin de nous dire: Comment cette matrice surviennent? Et de quoi avez-vous besoin de l'inverse?
Deux cas fréquents sont:
Si vous connaissez la matrice
A
exactement, par exemple parce qu'il est la matrice de conception dans un modèle linéaire généralb = A * X
puis en modifiant ce n'est pas une bonne idée. Dans ce cas, la matrice définit un système linéaire d'équations, et si la matrice est singulière cela signifie qu'il n'existe pas de solution unique à ce système. Pour choisir l'un de l'infinité de solutions possibles, il existe différentes stratégies:X = A \ b
choisit une solution avec autant de zéro les coefficients que possible, tout enX = pinv(A) * b
choisit la solution avec le minimum de la norme L2. Voir les exemples dans la documentation depinv
.Si la matrice
A
est estimée à partir de données, par exemple une matrice de covariance pour un LDA classificateur, et vous avez des raisons de croire que la vraie valeur n'est pas singulier et la singularité est due tout simplement à ne pas avoir assez de points de données pour l'estimation, l'application de régularisation ou "retrait" par l'ajout d'un petit multiple de la matrice identité est une stratégie commune. Dans ce cas, Schäfer et Strimmer (2005) décrire une façon d'estimer la optimale du coefficient de régularisation de la donnée elle-même.Mais je suis sûr qu'il y a d'autres cas avec d'autres réponses, trop.
D'ajouter des petites valeurs de la diagonale de
A
est à peu près équivalent à l'introduction d'une L2-norme régularisation terme dans la méthode des moindres carrés problèmeAx=b
. C'est que l'on cherche à minimiser le résidu ainsi la contrainte additionnelle:où
lamdba
contrôle le poids donné à minimiser la contrainte contre la minimisation de la norme résiduelle.Généralement ce paramètre est choisi à l'aide de une sorte de la validation croisée technique.