2010-07-06 10 views
1

Voici une question intéressante :)matrices de carrelage dans Matlab

J'ai deux « vecteurs de matrices » que je veux carreaux comme la fonction de Hankel fait pour les sommets réguliers. Par exemple: Colonne Vector:

10 
00 

20 
00 

30 
00 

vecteur ligne:

30 40 50 60 
00 00 00 00 

La matrice résultante doit être:

10 20 30 40 
00 00 00 00 

20 30 40 50 
00 00 00 00 

30 40 50 60 
00 00 00 00 

Notez que les 0 valeurs peuvent être modifiées, résultant la structure est la partie importante.

Une question connexe: Je regardais dans la commande "modifier repmat" et a vu une syntaxe intéressante que je ne pouvais pas trouver de l'aide pour:

A=[1,3;2,4]; 
X=[1,1;2,2]; 
B=A(X,X); 

et B finit par être

1 3 1 3 
2 4 2 4 
1 3 1 3 
2 4 2 4 

qui est essentiellement repmat (A, 2,2);

Donc, ma question est, quelle est cette syntaxe: A (X, X)?

Merci beaucoup!

Ofer

Répondre

0

Si vous souhaitez carreler un ensemble de matrices la façon dont HANKEL tuiles valeurs, voici une façon que vous pouvez le faire. Tout d'abord, vous pouvez mettre toutes vos matrices uniques dans un réseau de cellules:

mat = [1 0; 0 0]; 
cArray = {mat 2.*mat 3.*mat 4.*mat 5.*mat 6.*mat}; %# Your 6 unique matrices 

Maintenant, si vous voulez que les 3 premières matrices en cours d'exécution en bas de la première colonne et les 4 dernières matrices en cours d'exécution à travers la dernière ligne, vous pouvez créer une matrice d'index à l'aide HANKEL:

>> index = hankel(1:3,3:6); 

index = 

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

Ensuite, l'index de votre réseau de cellules avec index et utiliser CELL2MAT pour convertir le réseau de cellules résultant d'une matrice:

>> cell2mat(cArray(index)) 

ans = 

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



Pour la deuxième partie de votre question, lorsque vous effectuez une opération d'indexation comme A(X,Y), vous utilisez les éléments de X comme indices de ligne et les éléments de Y comme indices de colonne dans A. Chaque combinaison de valeurs dans X et Y est utilisée. Donc, si X = [x1 x2 x3 x4] et Y = [y1 y2 y3 y4], alors le résultat de B = A(X,Y) équivaut à:

B = [A(x1,y1) A(x1,y2) A(x1,y3) A(x1,y4); ... 
    A(x2,y1) A(x2,y2) A(x2,y3) A(x2,y4); ... 
    A(x3,y1) A(x3,y2) A(x3,y3) A(x3,y4); ... 
    A(x4,y1) A(x4,y2) A(x4,y3) A(x4,y4)]; 
+0

Hey, Merci d'avoir répondu. Peut-être que je n'étais pas clair parce que ce n'était pas exactement ce que je voulais dire. Pour la première partie, je ne veux pas entrelacer les choses. Je veux la structure hankel mais pour les matrices au lieu des scalaires individuels. C'est-à-dire, au lieu d'où hankel mettrait un nombre, je veux une matrice entière dans cette position. En ce qui concerne la deuxième partie, je suppose que ma question était encore plus fondamentale: que fait A (X, X)? En fait, que fait A (X, Y) pour être plus général? Encore une fois merci beaucoup d'avoir répondu :) – Ofer

+0

@Ofer: J'ai mis à jour ma réponse en fonction de vos clarifications. – gnovice

+0

Wow! Absolument génial! C'est exactement ce que je voulais. Merci :) – Ofer