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

Matrixmultiplikation mit einem Ergebnis höherer Dimension

 

Duvodas
Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2010, 14:47     Titel: Matrixmultiplikation mit einem Ergebnis höherer Dimension
  Antworten mit Zitat      
Hallo zusammen,

ich bin auf der Suche nach einem Befehl, der mir folgendes liefert:

Ich habe eine Matrix A € R^MxN und einen Vektor x € R^L.
Ich möchte diese nun so multiplizieren, dass ich als Ergebnis eine Matrix G € R^MxNxL bekomme. Das bedeutet, dass diese Matrix aus 3 Dimensionen bestehen soll. In der 3. Dimension befinden sich dann die Matrizen A skalar multipliziert mit den Einträgen von x.

Kennt jemand eine Möglichkeit, dies OHNE Schleifen zu programmieren? Das wäre super!
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: 28.07.2010, 19:05     Titel:
  Antworten mit Zitat      
Hallo Duvodas,

kannst Du zumindest den Code mit Schleifen posten? Dann müssten wir nicht alles neu erfinden. Sehe ich das richtig, dass dei beiden Arrays keine einzige gemeinsame Dimensionsgröße haben?! Meinst eine elementweise Multiplikation oder die üblichen Dot-Produkte?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Fourier
Forum-Guru

Forum-Guru


Beiträge: 329
Anmeldedatum: 05.04.10
Wohnort: Karlsruhe
Version: 2009b
     Beitrag Verfasst am: 29.07.2010, 09:04     Titel:
  Antworten mit Zitat      
Hallo,

meinst du sowas ?:
Code:

a=[1 2 3
4 5 6
7 8 9];

x=[1 2 3 4];

A=repmat(a,[1 1 length(x)]);
X=reshape(x,[1 1 length(x)]);

Ergebnis=bsxfun(@times,A,X);
 


gruss
_________________

Ein schlechter General ist besser als zwei gute.
Private Nachricht senden Benutzer-Profile anzeigen
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.07.2010, 12:12     Titel:
  Antworten mit Zitat      
Genau, das Ergebnis möchte ich.

Die Rechnung wir auch als dyadisches Produkt bezeichnet.
Bei zwei Vektoren geht das in MatLab ja einfach:
Code:
x=[1 2 3];
y=[2 3 4];
erg=x'*y;


Gibt es für solch eine doch recht grundlegene Rechenoperation keine MatLab Funktion?

Ansonsten schonmal danke für die bisherige Lösung!
Private Nachricht senden Benutzer-Profile anzeigen
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2010, 13:28     Titel:
  Antworten mit Zitat      
Ich habe nun erstmal obige Lösung verwendet.
Leider bin ich dabei nun auf ein Problem gestoßen. Wenn der Vektor x nur aus einem Element ist, erhalte ich als Ergebnis lediglich die Matrix A. Ich möchte aber ein Feld, welches drei Dimensionen hat, wobei die letzte dann nur aus einem Element besteht, also:

ergebnis € R^(m x n x 1)

wobei A € R^(m x n)

Kennt jemand eine Lösung dafür, wie ich die zusätzliche Dimension in das Feld bekomme?
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: 03.08.2010, 13:45     Titel:
  Antworten mit Zitat      
Hallo Duvodas,

Duvodas hat Folgendes geschrieben:

ergebnis € R^(m x n x 1)
wobei A € R^(m x n)
Kennt jemand eine Lösung dafür, wie ich die zusätzliche Dimension in das Feld bekomme?


Gar nicht. In Matlab werden bei mehr als 2 Dimensionen schließende Dimensionen der Länge 1 ignoriert. Versuche dies:
Code:
size(zeros(2,4,1))
size(rand(1,2,3,4,1,1,1,1))

Du kannst dennoch auf die entsprechenden Elemente zugreifen:
Code:
X = rand(3,4,1);
a = X(2, 2, 1)
a = X(2, 2, 1, 1, 1, 1, 1, 1, 1)

Das kann natürlich ziemlich tückisch werden, wenn man per NDIMS die Anzahl der Dimensionen vergleicht.
Das Verhalten erscheint ganz normal, wenn es um Spalten-Vektoren geht:
Code:
X = rand(10, 1);
disp(X(2));
disp(X(2, 1));

Etwas inkonsistent sieht es dagegen aus, wenn man das Ergebnis mancher Operationen betrachtet:
Code:
x = rand(10, 10, 10);
size(mean(x, 1))   % 1, 10, 10
size(mean(x, 2))   % 10, 1, 10
size(mean(x, 3))   % 10, 10


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2010, 15:42     Titel:
  Antworten mit Zitat      
Danke für die Hinweise.
Leider benötige ich die dritte Dimension, auch wenn sie eigentlich nicht vorhanden ist, um folgende Rechnung durchzuführen:

ergebnis=B.*daten(k,j,i)

k, j und i sind Vektoren, die nach meiner obigen Definition L, N und M Elemente haben.
B ist das "Ergebnis" aus den vorherigen Posts und wird mithilfe von 3 Vektoren berechnet.

Wenn L=1 ist, hat B nur noch 2 Dimensionen, während daten(k,j,i) 3 hat. Daher ist die elementweise Multiplikation nicht durchführbar.
Ich möchte es aber so programmieren, dass L, N und M jeweils 1 oder ungleich 1 sein können.
Private Nachricht senden Benutzer-Profile anzeigen
 
Duvodas
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 22
Anmeldedatum: 26.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2010, 15:55     Titel:
  Antworten mit Zitat      
Pardon, der Fehler, den ich erhielt, hatte eine andere Ursache.
MatLab ist also in der Lage, überflüssige Dimensionen zu irgnorieren.
Danke für die Hilfe!
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.