Existe-t-il une fonction dans R qui produit le reduced row echelon form
d'une matrice ?. This référence dit qu'il n'y a pas. Êtes-vous d'accord?Forme d'échelon de ligne réduite
Répondre
Le package pracma contient également une implémentation. Voir pracma :: rref.
Il ne semble pas y en avoir un intégré mais j'ai trouvé cette fonction rref sur la page this.
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))))
}
Je n'ai pas suffisamment de rep pour commenter, mais la fonction donnée ci-dessus dans la réponse acceptée est boguée - elle ne gère pas les matrices où la solution RREF a des zéros sur sa diagonale principale. Essayez par exemple
m < matrix (c (1,0,1,0,0,2), byrow = TRUE, nrow = 2) Rref (m)
et notez que la sortie se trouve pas dans RREF .
Je pense que je l'ai travailler, mais vous pouvez vérifier les résultats pour vous-même:
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
# Modified by Geoffrey Brent 2014-12-17 to fix a bug
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)
x.position<-1
y.position<-1
# change loop:
while((x.position<=m) & (y.position<=n)){
col <- A[,x.position]
col[1:n < y.position] <- 0
# find maximum pivot in current column at or below current row
which <- which.max(abs(col))
pivot <- col[which]
if (abs(pivot) <= tol) x.position<-x.position+1 # check for 0 pivot
else{
if (which > y.position) { A[c(y.position,which),]<-A[c(which,y.position),] } # exchange rows
A[y.position,]<-A[y.position,]/pivot # pivot
row <-A[y.position,]
A <- A - outer(A[,x.position],row) # sweep
A[y.position,]<-row # restore current row
if (verbose)
if (fractions) print(fractions(A))
else print(round(A,round(abs(log(tol,10)))))
x.position<-x.position+1
y.position<-y.position+1
}
}
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))))
}
Il y a aussi un récent programme développé pour enseignement algèbre linéaire (matlib) tous deux calcule la forme échelonnée d'une matrice, et montre les étapes utilisées en cours de route.
Exemple du reference docs:
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
- 1. C# Winform taille réduite en résolution réduite
- 2. Forme Android Ligne
- 3. Sélection réduite dans Opera
- 4. Excel Interop: Restauration fenêtre réduite
- 5. Taille réduite de l'image dans NSScrollView
- 6. Position de la fenêtre réduite dans WPF
- 7. Comment démarrer l'application WinForm réduite au minimum?
- 8. ligne de meilleur diagramme de dispersion en forme
- 9. ie7 insère saut de ligne après/avant étiquette de forme
- 10. meilleure courbe en forme de ligne de tendance
- 11. Automatisation de l'interface graphique de WIndows sur une fenêtre réduite
- 12. Comment faire pour afficher une fenêtre wxPython réduite
- 13. WPF - UIElement.RenderSize ne fonctionne pas pour la forme de ligne
- 14. Visual Studio Nouvelle mise en forme de ligne
- 15. Quand une version réduite de MicrosoftMvcAjax.js sera-t-elle disponible?
- 16. jQuery - Galerie réduite, changez la couleur de fond via CSS?
- 17. Comment faire une vidéo de taille réduite en utilisant AVAssetWriter?
- 18. Forme normale disjonctive avec prédicat de plage
- 19. android Forme dans une forme
- 20. Howto WPF Liaison écrite en ligne = forme abrégée
- 21. Mise en forme CSS multiligne ou multi-ligne
- 22. 2 divs sur une ligne avec forme entre
- 23. personnalisée UIButton image est réduite (rétrécie) dans l'iPhone OS 4.0
- 24. Notifier la fenêtre réduite d'une occurrence d'événement dans une applet
- 25. comment faire DataGrid Visibilité est réduite dans codebehind
- 26. Détecter la fenêtre du navigateur Maximisée/Réduite avec Javascript
- 27. comment envoyer la souris cliquez sur la fenêtre réduite?
- 28. Comment commander une vue résultat par une valeur réduite? CouchDB
- 29. Comment ouvrir à nouveau la fenêtre contextuelle réduite
- 30. L'invite d'avertissement de macro de Visio peut-elle être réduite lors de l'automatisation dans le code?
Cela ne permet pas de répondre à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous aurez suffisamment de [réputation] (http://stackoverflow.com/help/whats-reputation) vous pourrez être capable de [commenter sur n'importe quel post] (http://stackoverflow.com/help/privileges/comment). – lpapp
Désolé, je suis nouveau ici et peut avoir manqué quelque chose, mais: la "réponse acceptée" fournie par soldier.moth ci-dessus est buggy (comme je l'ai découvert à la dure quand j'ai essayé de l'utiliser moi-même!) Alors je pensais important de signaler cela. Je n'ai pas assez de rep pour commenter la réponse de soldier.moth directement, alors j'ai créé une nouvelle réponse - qu'aurais-je dû faire ici? –
Gagner assez de réputation pour commenter en premier? – lpapp