WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

MatrixA 5x5 mit MatrixB 5x5 multiplizieren = MatrixC 25x25

 

zander
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 17:59     Titel: MatrixA 5x5 mit MatrixB 5x5 multiplizieren = MatrixC 25x25
  Antworten mit Zitat      
Hallo Leute,

als Beispiel:
Eine Matrix A wird mit Matrix B so multipliziert das C eine "Zusammenstellung" der beiden ist.

Mein Versuch diese mit einer FOR-Schleife zu loesen ist mir nicht gelungen.
Kann es auch einfacher gehen ?

Beispiel:

Code:


A = [ 1 0 0 0 0 ;
         0 1 0 0 0 ;
         0 0 1 0 0 ;
         0 0 0 1 0 ;
         0 0 0 0 1 ];

B = [ 1 1 1 1 1 ;
         1 0 0 0 1 ;
         1 0 0 0 1 ;
         1 0 0 0 1 ;
         1 1 1 1 1 ];

o = zeros(5) %% kleines Oh...

 


Soweit recht einfach.
ABER nun soll die Ergebnis_Matrix C einen solchen Aufbau haben:

Code:


C = [ B o o o o ;
         o B o o o ;
         o o B o o ;
         o o o B o ;
         o o o o B ];

 


Wer hat so etwas geloest und kann mir helfen ?

Oder muss ich auf die FOR-Schleife zurueckfallen...

Danke fuer euere Zeit.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.12.2011, 19:00     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das richtig verstehe, ginge es so:

Code:
C = zeros(size(A,1)*size(B,1), size(A,2)*size(B,2));
C = mat2cell(C, repmat(size(A,1),size(B,1),1), repmat(size(A,2),size(B,2),1));
C(A == 1) = {B};
C = cell2mat(C);
 

Es kann sein, dass ich mich bei den size-Befehlen irgendwo verheddert habe, so dass es nicht so allgemeingültig ist, wie ich es wollte.

Ich würde generell empfehlen, die Beispiele zwar möglichst einfach zu gestalten, aber doch so generisch wie nötig. Eine Diagonalmatrix für A scheint ein Spezialfall zu sein. Falls A immer eine Diagonalmatrix ist, könnte man auch mit BLKDIAG arbeiten.

Grüße,
Harald

Zuletzt bearbeitet von Harald am 29.12.2011, 19:41, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.12.2011, 19:09     Titel: Re: MatrixA 5x5 mit MatrixB 5x5 multiplizieren = MatrixC 25x
  Antworten mit Zitat      
Hallo zander,

In Deinem Ergebnis kommt A gar nicht mehr vor. Ist das gewollt?

Zitat:
Eine Matrix A wird mit Matrix B so multipliziert das C eine "Zusammenstellung" der beiden ist.

Ich sehe keine Multiplikation und was bedeutet "Zusammenstellung" hier genau?

Dein C läßt sich so erstellen:
Code:
C = blkdiag(B,B,B,B,B);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zander
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 19:24     Titel:
  Antworten mit Zitat      
@ Harald:

Herzlichen Dank fuer deine Rueckmeldung. Ich muss das nun probieren. Ich melde mich wenn ich das hinbekommen habe.

Und, ja, die diagonal-Matrix ist hier fuer das Beispiel. Die Variable W kann je nach bedarf geaendert werden, somit dann auch A und B und C.

@ Jan:

A ist sozusagen die Matrix die andeuten soll WO in C die Matrix B reingeschrieben werden muss.

An Alle:

A kann in diesem Fall auch so aussehen:
Code:

A = [ 0 1 1 0 0 ;
         0 1 1 0 0 ;
         0 1 0 1 0 ;
         0 0 0 1 1 ;
         0 0 0 1 1 ];


Dann sollte C wie folgt erstellt worden sein:
Code:

C = [ o B B o o ;
         o B B o o ;
         o B o B o ;
         o o o B B ;
         o o o B B ];
 


Nochmals vielen Dank fuer Eure Rueckmeldung. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
zander
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 19:33     Titel:
  Antworten mit Zitat      
@ Harald, @ Alle..

Danke. Very Happy
Habe das nun hingekriegt.
Die Loesung von Harald hat mir geholfen.


Euch eine guten Rutsch ins Neue Jahr !!! Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
zander
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.12.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 23:07     Titel:
  Antworten mit Zitat      
@ Harald,

deine Loesung lief bei mir allerdings nur mit gleichen Matrixen A = B, also eine 3x3 Matrix A konnte keine 5x5 Matrix B auf 15x15 Matrix C erstellen.

Ich habe nun beigefuegtes Skript geschrieben. Vielleicht kann es dem einen oder anderen helfen...

Danke nochmals an Euch.

Code:


clear all;
A = [ 1 0 1 ;
         0 1 0  ;
         1 0 1  ] ;

B = [ 1 1 1 1 1 ;
         1 0 0 0 1  ;
         1 0 0 0 1
         1 0 0 0 1  ;
         1 1 1 1 1 ] ;

C2 = zeros( length(A)*length(B), length(A)*length(B)) ;

C2 = mat2cell( repmat(B, length(A), length(A)), repmat(size(B,1),size(A,1),1), repmat(size(B,1),size(A,1),1) ) ;

C2(A == 0) = zeros(length(B)) ;

C2 = cell2mat(C2) ;

% all work no fun ?
meshgrid(length(C2),length(C2),C2);
surf(C2)

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.12.2011, 23:37     Titel:
  Antworten mit Zitat      
oder so:
Code:
C=cell2mat(arrayfun(@(a)a*B,A,'uniformoutput',false));


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.12.2011, 00:09     Titel:
  Antworten mit Zitat      
Hallo zander,

Ah, jetzt wird es mir klar.

Code:

A = [ 0 1 1 0 0 ;
         0 1 1 0 0 ;
         0 1 0 1 0 ;
         0 0 0 1 1 ;
         0 0 0 1 1 ];
B = [1, 2; 3, 4];
C = kron(A, B);

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.