[MATLAB] Dubbi su sum e disp

studente_studente
Salve, non so in che sezione mettere il post comunque:
Buongiorno, non riesco a capire l'uso di sum e disp nonostante abbia letto online e su libri. Ho provato a fare qualche tentativo ma i dubbi persistono.

Ipotizzando di avere:
A=[1:3;4:6;7:9];
sum(A)
sum(A,1)
sum(A,2)
sum(A,3)
sum(A,4)

Ho notato che facendo:
-sum(A) oppure sum(A,1) ritorna un vettore riga dove le componenti sono la somma degli elementi di A lungo le colonne
-sum(A,2) ritorna un vettore colonna dove le componenti sono la somma degli elementi di A lungo le righe
-da sum(A,i) con i che parte da 3 in poi ritorna esattamente la matrice A.

Mentre per quanto riguarda disp:
x=[1,2,3,4];
disp(x)
disp([x])
disp(x')
disp([x'])
disp(x x')
disp([x x'])
disp(3 4)
disp[3 4]
disp([3 4])

Facendo:
-disp(x) oppure disp([x]) stampa il vettore x stampa il vettore riga x
-disp(x') oppure disp([x']) stampa il vettore x trasposto
-disp(x x') fa errore "Error: Unexpected MATLAB expression."
-disp([x x']) fa errore "Error using horzcat. Dimensions of matrices being concatenated are not consistent."
-disp(3 4) "Error: Unexpected MATLAB expression."
-disp[3 4] "Error: Unbalanced or unexpected parenthesis or bracket."
-disp([3 4]) però mi stampa correttamente i due valori

Potreste spiegarmi gentilmente la funzione disp e le sue parentesi? Perché se metto gli spazio tra i valori me li stampa mentre i vettori no? Quando scrivo disp([3 4]) considera i numeri come componenti di un vettore riga oppure semplicemente come numeri?

Grazie in anticipo!!

Risposte
insideworld
Ciao,
sono un pò arrugginito in matlab, ma provo comunque a risponderti.
se tu scrivi disp(x) stai chiedendo di stampare il contenuto della variabile x, ovvero il vettore/matrice.
quando tu usi le parentesi quadre (tipo disp([3 4]) )gli stai dicendo stampa (vettore definito qui ), cioè stai creando un vettore di elementi 3 e 4.
quando hai definito x hai usato le parentesi quadre perchè il loro significato è quello di creare un vettore, non c'entrano con i comando disp.
infatti disp[2 3] da errore perchè mancano le parentesi di disp all'interno delle quali è definito il parametro.
disp(3 4) invece fallisce perchè disp richiede un solo elemento.
infatti fallisce anche(x x')
ma fallirebbe anche disp(x a) con a due vettori qualunque.
non so se esiste un modo per stampare più vettori con il comando disp, mi ricordo che esistevano dei modi per unire più matrici in un unica matrice e memorizzarla in una variabile, ma non lo usavamo molto.
infine disp([x]) dovrebbe essere tollerato perchè tu stai definendo un vettore che contiene in posizione 1,1 una matrice, però quando usi disp([x x']) ti da errore perchè dovrebbe stamparti qualcosa del tipo
[1,1,1,1],[ 1
_________ 1
_________ 1
_________ 1]

(i trattini mi servono per allineare gli uni, perchè il sito cancella gli spazi multipli)
ovvero una matrice colonna con al primo elemento un vettore riga e al secondo un vettore colonna...
prova con disp([x x])con x vettore colonna o matrice quadrata, se funziona allora lo puoi usare solo per matrici con stessa "altezza", altrimenti usa
plot(x)
plot(x')

Ciao

studente_studente
Grazie mille, sei stato chiarissimo!
Hai qualche ricordo anche di sum?

insideworld
no ma ho trovato questo manualetto della mia prof
http://calvino.polito.it/~falletta/Calcolo_Numerico/ManualettoMatlab.pdf
pag 4 e 5 nella tabella ci sono degli esempi

apatriarca
La documentazione di Matlab è fatta molto bene. Per ottenere informazioni su una specifica funzione (per esempio sum) è sufficiente scrivere "help sum". Ovviamente è possibile anche farlo direttamente dalla GUI, ma non uso matlab da un po' di tempo per cui la GUI potrebbe essere cambiata. In alternativa è sufficiente cercare "Matlab sum" su google troverai probabilmente la stessa documentazione come primo risultato.

studente_studente
Grazie per le risposte, appena ho un attimo di tempo mi documento meglio e leggo quel manualetto!!

insideworld
ho appena visto che in uno degli utimi esami che devo sostenere c'è un?altra parte di matlab, quindi dai primi di marzo dovrei riprenderlo.
Se ti serve ancora cercherò di capire bene quelle cose sulla funzione sum e di risponderti

studente_studente
Grazie mille per l'interessamento, in effetti mi serve ancora perciò se ti capita ed hai un attimo fammi sapere!

apatriarca
Ma hai guardato la documentazione di Matlab? Le funzioni vengono spiegate in modo molto approfondito con esempi.. Non capisco esattamente quale sia il tuo dubbio riguardo alla funzione sum. Questa funzione somma i valori di una matrice lungo una qualche dimensione lasciando le altre invariate. Passando quindi 1 come secondo argomento stai sommando i valori di ogni colonna (il risultato è quindi un vettore riga), passando 2 stai sommando i valori per ogni riga e così via per ogni dimensione. Siccome la matrice ha solo due dimensioni non ha senso passare valori maggiori di 2. Se avessi però una matrice 3D anche sum(A, 3) avrebbe senso.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.