/ / Pourquoi sprank (A) et Ab indiquent un rang différent dans matlab? - matlab

Pourquoi sprank (A) et Ab indiquent un rang différent dans matlab? - matlab

J'ai un ensemble de points P et je le construismatrice adjacente A par k-voisin le plus proche. Chaque ligne de A est [... + 1 ...- 1 ...], indique une paire de points voisins. La taille de A est 48348 x 8058, sprank (A) est 8058. Mais quand je fais ce qui suit, cela me donne un avertissement: "Avertissement: rang défectueux, rang = 8055, tol = 8.307912e-10."

a = A * b; c = Aa;

et la norme (c-b) est assez grande. Il semble que quelque chose ne va pas avec la matrice A adjacente, mais je ne peux pas le comprendre. Merci d’avance!

Réponses:

0 pour la réponse № 1

sprank vous indique seulement combien de lignes / colonnes de votre matrice ont des éléments non nuls, alors que Ab rapporte le rang actuel de la matrice qui indique le nombre de lignes de votre matrice linéairement indépendant. Par exemple, pour la matrice suivante:

A = [-1  1  0  0;
0  1 -1  0;
1  0 -1  0;
0  0  1 -1]

sprank(A) est 4 mais rank(A) est seulement 3 parce que vous pouvez écrire la troisième ligne comme une combinaison linéaire des autres lignes, en particulier A(2,:) - A(1,:).

Le problème que vous devez résoudre est soit dans la façon dont vous "calculez" A (si vous vous attendez à ce que cela génère un système d’équations linéairement indépendantes) ou si vous devez trouver un moyen d’utiliser A cela ne nécessite pas de factoriser une matrice à rangs déficients.