[matlab] matrice

walzio
Salve,
avrei un problema con matlab. Vorrei creare questo tipo di processo:
ho 2 vettori X e Y
$\ X=[1,2,3,4,5,6]\ $
$ Y=\[10,20,30]\ $
la matrice che dovrei realizzare è questa
$\C=((1,2,3,4,5,5,4,3,2,1,1,2,3,4,5),(10,10,10,10,10,20,20,20,20,20,30,30,30,30,30),(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))\ $
il vettore X viene ripetuto n volte la dimensione del vettore Y, in questo caso 3, però X quando viene ripetuto, per la posizione di Y pari deve invertirsi e diventare $ \[5,4,3,2,1]\ $
Mi sapreste dire come automatizzare il processo?

Risposte
apatriarca
Immagino che il modo più facile sia quello di fare un ciclo su 1:length(Y) e concatenare ogni blocco.

vict85
Un modo è il seguente:

A = 1:5;
B = ones(1,5);
R1 = cat(2, A, fliplr(A), A);
R2 = cat(2, 10*B, 20*B, 30*B);
R3 = zeros(1,15);
A = cat(1, R1, R2, R3);
clear B R1 R2 R3


Al posto di fliplr(A) potevi anche scrivere 5:-1:1 e potevi anche non creare variabili temporanee.

apatriarca
Il seguente codice non usa il ciclo di cui parlavo prima. Provando a pensare come risolvere il problema sono arrivato alla conclusione che così è probabilmente meglio. Suppongo che X e Y siano matrici riga[\b].
RX = repmat(X', 1, length(Y));
RX(:,2:2:end) = flipud(RX(:,2:2:end));
RX = reshape(RX, 1, length(X)*length(Y));

Creo per prima cosa una matrice RX in cui ogni colonna è una copia di X e il numero di colonne è uguale a quello degli elementi di Y. Poi ribalto le colonne di indice pari. Infine cambio la forma della matrice RX in modo che sia nuovamente una matrice riga.
RY = repmat(Y, length(X), 1);
RY = reshape(RY, 1, length(X)*length(Y));

Faccio qualcosa di simile per Y ma questa volta ogni colonna ha length(X) copie di ogni elemento di Y. Sempre nella stessa riga cambio poi le dimensioni in modo da avere nuovamente una matrice riga.
C = [RX; RY; zeros(1, length(X)*length(Y))];

Infine concateno le 2 righe con una formata da tutti zeri.

EDIT: sostituito i prodotti con vettori di uno con repmat.

walzio
perfetto è proprio quello che volevo grazie mille.
Visto che ci sono chiedo anche un altra cosa
Devo importare 2 tipi di file kml e txt
sapete come posso scrivere il ciclo if
io ho provato con
if '*.kml'
istruzione
else '.txt'
istruzione
end

ma nn ho ottenuto i risultati sperati

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