2012-08-24 8 views
5

Ho una matrice similefare una matrice 'n' tempo maggiore in MATLAB

1 2 3 4 
2 3 4 5 
3 4 5 6 

c'è qualche funzione che rende righe n volte e colonne m volte in MATLAB intendo per esempio per n = 2 e m = 3 il risultato essere:

1 1 1 2 2 2 3 3 3 4 4 4 
1 1 1 2 2 2 3 3 3 4 4 4 
2 2 2 3 3 3 4 4 4 5 5 5 
2 2 2 3 3 3 4 4 4 5 5 5 
3 3 3 4 4 4 5 5 5 6 6 6 
3 3 3 4 4 4 5 5 5 6 6 6 

grazie

risposta

9

È possibile utilizzare il prodotto di Kronecker:

A=[1 2 3 4;5 6 7 8;9 10 11 12]; 
kron(A,ones(2,3)) 
ans = 
    1  1  1  2  2  2  3  3  3  4  4  4 
    1  1  1  2  2  2  3  3  3  4  4  4 
    5  5  5  6  6  6  7  7  7  8  8  8 
    5  5  5  6  6  6  7  7  7  8  8  8 
    9  9  9 10 10 10 11 11 11 12 12 12 
    9  9  9 10 10 10 11 11 11 12 12 12 

Per ulteriori informazioni, si può guardare su wikipedia:

http://en.wikipedia.org/wiki/Kronecker_product

0

Ecco la mia soluzione:

%------------------data----------------- 
>> mat = [1 2 3 4;2 3 4 5;3 4 5 6] 
mat = 
    1  2  3  4 
    2  3  4  5 
    3  4  5  6 
>> [m,n] = deal(3,2) 
m = 
    3 
n = 
    2 
%----------------solution---------------- 
>> col = meshgrid(1:size(mat,2),1:m); 
>> row = meshgrid(1:size(mat,1),1:n); 
>> mat(row,col) 
ans = 
    1  1  1  2  2  2  3  3  3  4  4  4 
    1  1  1  2  2  2  3  3  3  4  4  4 
    2  2  2  3  3  3  4  4  4  5  5  5 
    2  2  2  3  3  3  4  4  4  5  5  5 
    3  3  3  4  4  4  5  5  5  6  6  6 
    3  3  3  4  4  4  5  5  5  6  6  6