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

Matrix alle Spalten miteinander multiplizieren

 

Sebaldus18
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2018, 20:11     Titel: Matrix alle Spalten miteinander multiplizieren
  Antworten mit Zitat      
Schönen guten Abend wünsche ich euch.

Ich würde gerne jede Spalte meiner Matrix miteinander multiplizieren, dass ich als Ergebnis so etwas bekomme.

X = [A B C D] --> Xneu = [A*B A*C A*D B*C B*D C*D]

Die Matrix hat die Dimension 12x11. Bisher erreiche ich leider nur, dass ich die erste Spalte mit den anderen Spalten multipliziere und das über for-Schleifen:

Code:

j = 1;

for m = j+1:k
    for n = 1:N
        Xneu(n,m-1) = X(n,j)*X(n,m);
    end    
end


k = Anzahl Spalten
N = Anzahl Zeilen
j = Variable, mit der ich in der Matrix von Spalte 1 weitergehen möchte aber bisher weiß ich nicht, wie das am besten umzusetzen ist.

Es wäre nett, wenn Ihr mir helfen könntet. Ich hoffe, mein Problem konnte ich verständlich rüberbringen.
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: 18.10.2018, 13:03     Titel: Re: Matrix alle Spalten miteinander multiplizieren
  Antworten mit Zitat      
Hallo Sebaldus18;

Code:
X = repmat(1:12, 11, 1);  % Test data
n = size(X, 2);
Xneu = zeros(n * (n-1) / 2 , 11);
c = 0;
for k1 = 1:n - 1
  for k2 = k1 + 1:n
     c = c + 1;
     Xneu(c, :) = X(:, k1) .* X(:, k2);
  end
end

Oder mit Matlab >= 2016b:
Code:
X = repmat(1:12, 11, 1);  % Test data
n = size(X, 2);
C = cell(1, n-1);
for k1 = 1:n - 1
  C{k1} = X(:, k1) .* X(:, k1 + 1:n);  % Auto-expand
end
Xneu = cat(2, C{:});

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.10.2018, 10:06     Titel:
  Antworten mit Zitat      
Hallo Jan,

vielen Dank für deinen Beitrag. Ich habe mittlerweile auch eine Lösung bekommen:

Code:

for m = 1:k
    for n = m+1:k
        Xneu = [Xneu X(:,m).*X(:,n)];
    end                                
end


Ich habe gesehen, dass du bei der ersten for-schleife k1 = 1: n-1 setzt. Bei meiner Schleife habe ich das nicht gemacht und komme auf das gleiche Ergebnis wie du.
Woran liegt das denn? Oder habe ich hier gerade einen Denkfehler...
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: 23.10.2018, 12:54     Titel:
  Antworten mit Zitat      
Hallo Sebaldus18,

Zitat:
Ich habe gesehen, dass du bei der ersten for-schleife k1 = 1: n-1 setzt. Bei meiner Schleife habe ich das nicht gemacht und komme auf das gleiche Ergebnis wie du.

Was ist denn "k" in Deinem Fall?

Das iterative Vergrößern von Arrays ist grundsätzlich ein problematischer Programmierstil, denn die Komplexität steigt exponentiell. Was mit 100 Schritten gut funktioniert, kann mit 200 schon Stunden dauern.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2018, 18:50     Titel:
  Antworten mit Zitat      
Hallo Jan

k ist bei mir die Anzahl der Spalten von X. Die Matrix X erzeuge ich vor der Schleife, wodurch die Dimension ja fest steht.

Mir ist gerade aufgefallen, dass bei mir k eine leere Menge ist, wenn ich die Schleife so programmiere:

Code:
for m = 1:k  
    for o = m + 1:k


anstatt

Code:
for m = 1:k -1  
    for o = m + 1:k


Hängt das damit zusammen, dass ich den Indize m mit in die zweite Schleife nehme?

Gruß
Sebaldus
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 - 2024 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.