Quanto è utile/interessante questa discussione:
Autore |
Discussione |
|
ki4rett4
Nuovo Arrivato
35 Messaggi |
Inserito il - 02 febbraio 2011 : 13:34:34
|
Ragazzi anche quest' esercizio in R non si trova eppure pensavo di averlo svolto correttamente, non capisco dove sia l' errore!!Spero che qualcuno possa guidarmi i questa difficile ricerca!!Grazie a tutti ancora L' esercizio è: Scrivere una funzione, isSimmetrica(m), che restituisce TRUE se la matrice quadrata data in input è una matrice simmetrica, FALSE altrimenti. Una matrice quadrata si dice simmetrica se gli elementi simmetrici rispetto alla diagonale principale sono uguali (cioè se m[i,j]== m[j,i] per ogni i e j).
Io l' ho svolto così: isSimmetrica<-function(m){ righe<-c(1:nrow(m)) colonne<-c(1:ncol(m)) for(i in righe){ for(j in colonne){ if(m[i,j]==m[j,i]){ condizione<-TRUE }else{ condizione<-FALSE } } } return(condizione) }
Come esempio di matrice quadrata simmetrica ho utilizzato questa, giusto per provare l' esercizio e mi dà TRUE, ma anche utilizzando una matrice non simmetrica mi dà TRUE....quindi non saprei... x<-c(1,2,3,2,0,5,3,5,6) m<-matrix(x,3)
[,1] [,2] [,3] [1,] 1 2 3 [2,] 2 0 5 [3,] 3 5 6
|
|
|
Glubus
Utente Junior
156 Messaggi |
Inserito il - 02 febbraio 2011 : 14:53:47
|
prova a wrappare questa idea
all(m==t(m))
Stefano
Citazione: Messaggio inserito da ki4rett4
Ragazzi anche quest' esercizio in R non si trova eppure pensavo di averlo svolto correttamente, non capisco dove sia l' errore!!Spero che qualcuno possa guidarmi i questa difficile ricerca!!Grazie a tutti ancora L' esercizio è: Scrivere una funzione, isSimmetrica(m), che restituisce TRUE se la matrice quadrata data in input è una matrice simmetrica, FALSE altrimenti. Una matrice quadrata si dice simmetrica se gli elementi simmetrici rispetto alla diagonale principale sono uguali (cioè se m[i,j]== m[j,i] per ogni i e j).
Io l' ho svolto così: isSimmetrica<-function(m){ righe<-c(1:nrow(m)) colonne<-c(1:ncol(m)) for(i in righe){ for(j in colonne){ if(m[i,j]==m[j,i]){ condizione<-TRUE }else{ condizione<-FALSE } } } return(condizione) }
Come esempio di matrice quadrata simmetrica ho utilizzato questa, giusto per provare l' esercizio e mi dà TRUE, ma anche utilizzando una matrice non simmetrica mi dà TRUE....quindi non saprei... x<-c(1,2,3,2,0,5,3,5,6) m<-matrix(x,3)
[,1] [,2] [,3] [1,] 1 2 3 [2,] 2 0 5 [3,] 3 5 6
|
|
|
ki4rett4
Nuovo Arrivato
35 Messaggi |
Inserito il - 03 febbraio 2011 : 20:27:15
|
No il problema stefano è che l' esercizio devo svolgerlo con un ciclo for poichè il professore non ci ha fatto studiare tutte le funzioni ma solo alcune. Grazie mille comunque!! |
|
|
chick80
Moderatore
Città: Edinburgh
11491 Messaggi |
Inserito il - 03 febbraio 2011 : 20:33:45
|
Il problema è che tu passi sempre tutti gli elementi della matrice!
Quindi basta che la condizione sia true per l'ultimo elemento e la tua funzione restituirà true!
Per avere il comportamento corretto basta uscire dal ciclo non appena trovi un elemento che non soddisfa la condizione (tanto se ce n'è anche solo 1 non buono la matrice non è simmetrica).
Quindi invece di:
else
{
condizione<-FALSE
}
basterà usare:
else
{
condizione<-FALSE
break;
}
break uscirà immediatamente dal ciclo for, facendoti restituire il giusto valore.
Ovviamente questo è un metodo molto meno efficiente di quello proposto da Stefano.
|
Sei un nuovo arrivato? Leggi il regolamento del forum e presentati qui
My photo portfolio (now on G+!) |
|
|
ki4rett4
Nuovo Arrivato
35 Messaggi |
Inserito il - 04 febbraio 2011 : 13:03:28
|
Non so come ringraziarti chick80...ora mi esce correttamente...iuuuuuuuuuuuuuuuuu
|
|
|
|
Discussione |
|
|
|
Quanto è utile/interessante questa discussione:
MolecularLab.it |
© 2003-18 MolecularLab.it |
|
|
|