/ / Ho bisogno di aiuto per capire le funzioni di Matlab [duplicate] - matlab

Ho bisogno di aiuto per capire le funzioni di Matlab [duplicate] - matlab

Qualcuno può spiegarmi la soluzione di questo esercizio:

Esercizio

Scrivi una funzione chiamata odd_index che prende una matrice, M, come argomento di input e restituisce una matrice che contiene solo elementi di M Quelli che sono in righe e colonne dispari. In altre parole, restituirebbe gli elementi di M agli indici (1,1), (1,3), (1,5), ..., (3,1), (3,3), (3,5) , ..., ecc. Quella nota sia la riga che la colonna di un elemento devono essere dispari per essere inclusi nell'output. Il seguente non sarebbe stato restituito: (1,2), (2,1), (2,2) Perché la riga o la colonna o entrambi sono pari. Ad esempio, se M Era una matrice 5 per 8, l'output deve essere quindi un 3 per 4 Perché la funzione omette le righe 2 e 4 di M e omette anche le colonne 2, 4, 6 e 8 di M .

Soluzione:

 M_out = odd_index function (M)
M_out = M (1: 2: end, 1: 2: end);
end

Soluzione di collegamento: Restituisci solo elementi dispari

Qualcuno può spiegarmi come sono arrivati ​​alla funzione M_out = M (1: 2: end, 1: 2: end) ;.

risposte:

1 per risposta № 1
function M_out = odd_index (M)
M_out = M(1: 2: end, 1: 2: end);
end

Prendo ciascuno dispari elemento della matrice M e lo restituisce a una matrice M_out,

M = [1 2 3; 4 5 6;7 8 9];
M_out = odd_index(M)

M_out =

1     3
7     9

dove puoi vedere quegli elementi su una riga dispari e su una colonna dispari vengono stampati, ma gli elementi su righe pari e persino su colonne vengono esclusi.

Il trucco qui è di passare attraverso gli indici in passi di 2 invece di 1. M(1,1) dà l'elemento nell'angolo in alto a sinistra di M, cioè 1. M(1:2,1) restituisce i primi due elementi nella colonna di sinistra: 1 e 4. Ciò accade perché n:m crea un vettore di numeri in esecuzione da n a m in passaggi di 1. È possibile modificare questa dimensione di passaggio aggiungendo un numero: n:x:m, dove x specifica quanto sono grandi i tuoi passi. Dal momento che i numeri dispari sono 2 a parte, è sufficiente avviare il vettore con il numero più basso, positivo, dispari, 1 e il passo con la dimensione 2. L'ultimo elemento nel vettore 1:2:end significa semplicemente "la fine del vettore", quindi, se M = [5x3] il end delle file è 5, perché ci sono cinque file e il end delle colonne sarebbe 3, poiché ci sono tre colonne.