y a-t-il une fonction dans laquelle produit la forme code> de ligne code> d'une matrice ?. Cette référence dit qu'il n'y a pas. Êtes-vous d'accord? P>
4 Réponses :
Ne ressemble pas à une entreprise intégrée mais j'ai trouvé cette fonction RREF sur Cette Page .
rref <- function(A, tol=sqrt(.Machine$double.eps),verbose=FALSE, fractions=FALSE){ ## A: coefficient matrix ## tol: tolerance for checking for 0 pivot ## verbose: if TRUE, print intermediate steps ## fractions: try to express nonintegers as rational numbers ## Written by John Fox if (fractions) { mass <- require(MASS) if (!mass) stop("fractions=TRUE needs MASS package") } if ((!is.matrix(A)) || (!is.numeric(A))) stop("argument must be a numeric matrix") n <- nrow(A) m <- ncol(A) for (i in 1:min(c(m, n))){ col <- A[,i] col[1:n < i] <- 0 # find maximum pivot in current column at or below current row which <- which.max(abs(col)) pivot <- A[which, i] if (abs(pivot) <= tol) next # check for 0 pivot if (which > i) A[c(i, which),] <- A[c(which, i),] # exchange rows A[i,] <- A[i,]/pivot # pivot row <- A[i,] A <- A - outer(A[,i], row) # sweep A[i,] <- row # restore current row if (verbose) if (fractions) print(fractions(A)) else print(round(A,round(abs(log(tol,10))))) } for (i in 1:n) if (max(abs(A[i,1:m])) <= tol) A[c(i,n),] <- A[c(n,i),] # 0 rows to bottom if (fractions) fractions (A) else round(A, round(abs(log(tol,10)))) }
Le paquet PRACMA contient également une implémentation. Voir Pracma :: Rref. P>
Je n'ai pas assez de représentant à commenter, mais la fonction donnée M <-Matrix (C (1,0,1,0,0,0,2), BYROW = True, NROW = 2)
rref (m) p> et notez que la sortie n'est pas dans RREF. P> Je pense que je le travaille, mais vous pouvez vérifier les sorties pour vous-même: P> < Pré> xxx pré> p> ci-dessus par soldat.moth dans la réponse acceptée [Modifier 2018: plus la réponse acceptée] est Buggy - il ne le fait pas Manipuler des matrices où la solution RREF a des zéros sur sa diagonale principale. Essayez E. g.
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements d'un auteur, laissez un commentaire sous leur poste - vous pouvez toujours commenter vos propres messages, et une fois que vous avez suffisamment Réputation Vous pourrez Commentaire sur n'importe quel message .
Désolé, je suis nouveau ici et j'ai peut-être manqué quelque chose, mais: la "réponse acceptée" fournie par soldat.Moth ci-dessus est buggy (comme j'ai découvert la dure quand j'ai essayé de l'utiliser moi-même!) Alors je pensais que c'était important signaler cela. Je n'ai pas assez de représentant pour commenter directement la réponse du soldat.Moth directement, alors j'ai créé une nouvelle réponse - que devrais-je avoir fait ici?
Gagner suffisamment de réputation pour commenter d'abord?
haussement d'épaules i> Je n'ai vraiment pas pensé que personne ne serait dérangé par moi en soulignant un virus non évident qui avait disparu quatre ans sans correction, et étant donné que la "solution" buggy postée ci-dessus était acceptée comme réponse. Je suis perplexe sur la raison pour laquelle une version fixe du même code est considérée comme moins.
@Geoffreybrent, bienvenue à Stackoverflow. Où les règles remplacent le bon sens.
Il existe également un colis récent développé pour enseignement em> algèbre linéaire ( MATLIB ) qui calcule la forme d'échelon d'une matrice et montre les étapes utilisées en cours de route. Exemple de la Documents de référence : P> library('matlib')
A <- matrix(c(2, 1, -1,-3, -1, 2,-2, 1, 2), 3, 3, byrow=TRUE)
b <- c(8, -11, -3)
echelon(A, b, verbose=TRUE, fractions=TRUE)
Initial matrix:
[,1] [,2] [,3] [,4]
[1,] 2 1 -1 8
[2,] -3 -1 2 -11
[3,] -2 1 2 -3
row: 1
exchange rows 1 and 2
[,1] [,2] [,3] [,4]
[1,] -3 -1 2 -11
[2,] 2 1 -1 8
[3,] -2 1 2 -3
multiply row 1 by -1/3
[,1] [,2] [,3] [,4]
[1,] 1 1/3 -2/3 11/3
[2,] 2 1 -1 8
[3,] -2 1 2 -3
multiply row 1 by 2 and subtract from row 2
[,1] [,2] [,3] [,4]
[1,] 1 1/3 -2/3 11/3
[2,] 0 1/3 1/3 2/3
[3,] -2 1 2 -3
multiply row 1 by 2 and add to row 3
[,1] [,2] [,3] [,4]
[1,] 1 1/3 -2/3 11/3
[2,] 0 1/3 1/3 2/3
[3,] 0 5/3 2/3 13/3
row: 2
exchange rows 2 and 3
[,1] [,2] [,3] [,4]
[1,] 1 1/3 -2/3 11/3
[2,] 0 5/3 2/3 13/3
[3,] 0 1/3 1/3 2/3
multiply row 2 by 3/5
[,1] [,2] [,3] [,4]
[1,] 1 1/3 -2/3 11/3
[2,] 0 1 2/5 13/5
[3,] 0 1/3 1/3 2/3
multiply row 2 by 1/3 and subtract from row 1
[,1] [,2] [,3] [,4]
[1,] 1 0 -4/5 14/5
[2,] 0 1 2/5 13/5
[3,] 0 1/3 1/3 2/3
multiply row 2 by 1/3 and subtract from row 3
[,1] [,2] [,3] [,4]
[1,] 1 0 -4/5 14/5
[2,] 0 1 2/5 13/5
[3,] 0 0 1/5 -1/5
row: 3
multiply row 3 by 5
[,1] [,2] [,3] [,4]
[1,] 1 0 -4/5 14/5
[2,] 0 1 2/5 13/5
[3,] 0 0 1 -1
multiply row 3 by 4/5 and add to row 1
[,1] [,2] [,3] [,4]
[1,] 1 0 0 2
[2,] 0 1 2/5 13/5
[3,] 0 0 1 -1
multiply row 3 by 2/5 and subtract from row 2
[,1] [,2] [,3] [,4]
[1,] 1 0 0 2
[2,] 0 1 0 3
[3,] 0 0 1 -1