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

Viele Objekteigenschaften in einer gemeinsamen Matrix

 

MarekJosef
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.11.2014, 22:25     Titel: Viele Objekteigenschaften in einer gemeinsamen Matrix
  Antworten mit Zitat      
Folgende Sache:
ich habe eine Menge Objekte, z.B. N Partikel. Jedes Partikel P hat die Eigenschaft der Koordinaten x und der Geschwindigkeit v, jeweils 2d Vektoren.

Wenn ich die plotten möchte, brauche ich bis jetzt eine Schleife
Code:

hold on
% Loop over every particle
for i = 1:size(P,2)
    % Plot the position
    plot(P(i).x(1),P(i).x(2),'o', 'Color', 'red', 'LineWidth',2)  
   
    % Plot the velocity vector
    quiver(P(i).x(1),P(i).x(2), P(i).v(1), P(i).v(2), 0, 'blue', 'LineWidth',1)
end
hold off
 


Das ist ziiiiiemlich langsam. Ich würde gerne in den plot direkt Matrizen übergeben. Mit P.x bekomme ich z.B. nur

Code:

ans =

    3.4448
   -0.3611


ans =

    3.2450
   -1.9637


ans =

   -0.6749
   -4.3931


ans =

   -0.5721
    1.7842


ans =

   -1.2808
   -0.8540

...


Gibt es einen Befehl, dass ich irgendwie die Daten direkt in einer Matrix erhalte, sodass ich diese einfach dem Plot übergeben kann.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

alles nebeneinander:
Code:

alles untereinander:
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2014, 00:11     Titel:
  Antworten mit Zitat      
Viiiielen Dank! Das hat sofort super geklappt. Genau das hab ich gesucht. Damit spare ich mir jetzt viele Schleifen Smile.

Ich hätte noch eine "Sahnehäubchenfrage": Damit ich jeweils auf die x- bzw. y-Koordinate zugreifen kann, muss ich die Matrix [P.x] zwischenspeichern, z.B.
Code:


und dann den Plot mittels

Code:
plot(X(1,:), X(2,:) ,'o', 'Color', 'red', 'LineWidth',2)
 


erstellen. Kann ich auch direkt auf die Zeilen mittels dem Befehl [P.x] zugreifen, so in der Art von
Code:
[P.x](1,:)
?

Die Syntax ist ja natürlich falsch und das klappt nicht. Aber gibt es sowas? Wäre dies schneller als die Zwischenspeicherung?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.435
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2014, 20:04     Titel:
  Antworten mit Zitat      
Hallo,

eine solche Syntax ist mir nicht bekannt.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 10.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2014, 00:17     Titel:
  Antworten mit Zitat      
Ok.

Dann habe ich noch ein weiteres ähnliches Problem. In einem anderem Modell sind meine Objekte in einer Matrix angeordet. Ich greife auf die einzelnen Gitterzellen, welche in einem 2-dimensionalen Rechteck angeordnet sind, mittels
Code:


zu und erhalte z.B. die Dichte mittels
Code:
G{2,3}.rho
.

Durch
Code:
T = [G{2:g.number_gridcells_x+1,1}];
[T.rho]
 


kann ich nun alle Dichten in einem Vektor bekommen. Doch, ich möchte eig. nun die Dichten in den Gitterzellen geschickt überschreiben, und über die Hilfsvariable T ist das leider nicht möglich. Auch kann ich NICHT
Code:

[G{2,:}].rho
 [G{2,:}].rho
        |
Error: Unexpected MATLAB operator.
 


verwenden, die Syntax ist falsch. Bis jetzt update ich die Zellen so (Randbedingungen)
Code:

for i = 2:obj.number_gridcells_x+1
                G{i,1}.rho = G{i, obj.number_gridcells_y+1}.rho;
                G{i,1}.u = G{i, obj.number_gridcells_y+1}.u;
                G{i, obj.number_gridcells_y+2}.rho = G{i, 2}.rho;
                G{i ,obj.number_gridcells_y+2}.u = G{i, 2}.u;                
end
 


Die Schleife will ich einsparen. Gibt es nun eine Möglichkeit?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du kannst es höchstens mit arrayfun / cellfun versuchen.
Eine andere Frage wäre, ob man die Daten von vorneherein so organisieren könnte, dass es sich leichter damit arbeiten lässt.

Grüße,
Harald
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.