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

Kombinationen

 

Miriel
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2013, 08:50     Titel: Kombinationen
  Antworten mit Zitat      
Hy,
Ich habe eine Matrix
A=1 2 0
2 3 0
3 4 0
und möchte jede Zeile hinten mit einem Vektor kombinieren
B= x
y
z
so das es aussieht
C= 1 2 x
1 2 y
1 2 z
2 3 x
2 3 y...
Natürlich in größeren Dimensionen.Wie mach ich das am gekonntesten???
Danke
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.05.2013, 09:01     Titel:
  Antworten mit Zitat      
Hallo,

ich würde es so machen:
Code:
A=[1 2 0
2 3 0
3 4 0];
b = [5;6;7];

C = zeros(size(A,1)*numel(b), 3);
C(:,1) = reshape(repmat(A(:,1)',numel(b),1),[],1);
C(:,2) = reshape(repmat(A(:,2)',numel(b),1),[],1);
C(:,3) = repmat(b, size(A,1), 1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2013, 09:33     Titel:
  Antworten mit Zitat      
Auf so eine Idee wäre ich nie gekommen, ich habe mit Schleifen gerechnet, ser elegant, allerdings hab ich leicht Probleme dahinter zu steigen. Daher meine Weiterführende Frage:
Wenn ich die Matrix verlänger klappt alles, aber wenn ich den Vektor verlänger sagt er mir die Dimensionen passen nicht. Woran liegt das?

Und noch mal allgemein, warum muss ich mir erst die Matrix in der richtigen Gößren mit Nullen Definieren, das hab ich jetzt schon öfters gesehen aber den Sinn nicht wirklich verstanden
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2013, 09:38     Titel:
  Antworten mit Zitat      
Okay sorry das Funktioniert doch, Im Programm hatte ich für b nur eine Reihe und nicht einen Zeilen Vektor.....Aber die zweite Frage würde mich trotzdem interessieren
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.05.2013, 10:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
allerdings hab ich leicht Probleme dahinter zu steigen

Am einfachsten ist es, wenn man sich das für das kleine Problem mal Schritt für Schritt durchgeht, was da passiert.

Zitat:
aber wenn ich den Vektor verlänger sagt er mir die Dimensionen passen nicht.

Mein Code geht davon aus, dass b ein Spaltenvektor ist.

Zitat:
Und noch mal allgemein, warum muss ich mir erst die Matrix in der richtigen Gößren mit Nullen Definieren, das hab ich jetzt schon öfters gesehen aber den Sinn nicht wirklich verstanden

Man muss nicht, es ist aber durchaus üblich. Zum einen macht es das ganze verständlicher, zum anderen sollten (insbesondere in for-Schleifen) dynamisch wachsende Variablen vermieden werden, da die Variable dann möglicherweise in einen anderen Speicherbereich verschoben werden muss und das Zeit kostet.
Letzteres dürfte aber hier mit den drei Spalten kaum eine Rolle spielen, insofern hat das wirklich nur ästhetische Gründe.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2013, 13:18     Titel:
  Antworten mit Zitat      
Danke
Zitat:
Letzteres dürfte aber hier mit den drei Spalten kaum eine Rolle spielen, insofern hat das wirklich nur ästhetische Gründe.

Ich hatte ja schon geschrieben, das ich das ganze auf durch aus auf größere Systeme anwenden wollte, das war auch meine Spekulation gewessen das aus Zeit gründen gemacht wird.

So langsam Blicke ich durch aber jetzt stellt sich ein Problem für meinen nächsten Schritt.Jetzt hätte ich gerne zwei mal Vector b, also
1 2 x x
1 2 x y
1 2 x z
1 2 y x
1 2 y z
...
5 6 z z

Die ersten zwei Spalten auf das richtige Verlängern ist kein Problem, die letzte Spalte auch nicht, aber ich bekomme ihm nicht die richtige Dimension der 3 Spalte gesagt.
Wenn ihr mir da auch noich helfen könntet??
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.05.2013, 14:14     Titel:
  Antworten mit Zitat      
Hallo,

da kannst du denselben Trick anwenden wie bei den ersten beiden Spalten:

Code:
C(:,3) = reshape(repmat(b',numel(C(:,1))/numel(b), 1),[],1);

Vielleicht lässt sich der Multiplikator auch einfacher schreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 08:54     Titel:
  Antworten mit Zitat      
Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 09:11     Titel:
  Antworten mit Zitat      
Aber leider klappt es nicht, weil an genau dieser Zeile Matlab immer sagt das die Dimensionen nicht passen
Code:
A=[1 2 0
2 3 0
3 4 0];
b = [5;6;7];

C = zeros(size(A,1)*numel(b)^2, 3);
C(:,1) = reshape(repmat(A(:,1)',numel(b)^2,1),[],1);
C(:,2) = reshape(repmat(A(:,2)',numel(b)^2,1),[],1);
C(:,3) = reshape(repmat(b',numel(C(:,1))/numel(b), 1),[],1);
C(:,4) = repmat(b, size(A,1), 1);
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2013, 10:07     Titel:
  Antworten mit Zitat      
Hallo,

bei mir kommt die Fehlermeldung aus der letzten Zeile. Die muss noch ein wenig angepasst werden:
Code:
C(:,4) = repmat(b, size(A,1)*numel(b), 1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 10:22     Titel:
  Antworten mit Zitat      
Stimmt, jetzt kommt zwar keine Fehlermeldung, aber leider stimmt die Matrix in der dritten Zeile nicht mit meiner Wunsch Matrix überein.
ich bekomme

abxx
abxy
abxz
abxx
hätte anstatt des Roten x aber ein y
...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.05.2013, 10:31     Titel:
  Antworten mit Zitat      
Hoppla,
wie siehts jetzt aus?

Code:
C = zeros(size(A,1)*numel(b)^2, 3);
C(:,1) = reshape(repmat(A(:,1)',numel(b)^2,1),[],1);
C(:,2) = reshape(repmat(A(:,2)',numel(b)^2,1),[],1);
C(:,3) = repmat(reshape(repmat(b',numel(b), 1),[],1), size(A,1), 1);
C(:,4) = repmat(b, size(A,1)*numel(b), 1);


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Miriel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 25.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.05.2013, 10:50     Titel:
  Antworten mit Zitat      
Super!!!!!
Vielen Vielen Dank!!!!
Du rettets mir mein Praktikum.
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.