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

Vektor in if-Bedingung einbauen

 

Schmankerl
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.12.2012, 18:20     Titel: Vektor in if-Bedingung einbauen
  Antworten mit Zitat      
Hallo miteinander,

ich habe 2 gleich große Vektoren mit den Namen M und T (200 x 1) und eine Matrix A (200 x 2) , also die Matrix mit lediglich einer Spalte mehr.

Nun möchte ich elementweise überprüfen:

Code:

if M>1  
   T=(2.*A(:,2)) ;
end
 


Ich möchte quasi das erste Element des Vektors M prüfen, ob es größer als 1 ist, wenn ja, dann möchte ich das erste Element vom Vektor T überscheiben mit 2* "dem entsprechenden Element aus der Matrix an gleicher Position".

Anschließend dann das zweite Element von M prüfen und dann das zweite Element vom Vektor 2 überschreiben...

Da die Vektoren und der Vektor aus der Matrix gleich groß sind, müsste es doch elementweise funktionieren?

Muss ich mit "." arbeiten, also if M .>1 ? Aber das funktioniert auch nicht...

Hat jemandn Tipp?

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: 14.12.2012, 21:42     Titel:
  Antworten mit Zitat      
Hallo,

so?
Code:
T(M>1) = 2*A(M>1, 2);


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 13:05     Titel:
  Antworten mit Zitat      
Super das hat geklappt! Danke.

Jetzt würde ich nur gerne verstehen was hier passiert?

Code:
T(M>1) = 2*A(M>1, 2);


Wieso reicht es nicht
Code:
T = 2*A(M>1, 2);
?

Was macht denn das
Code:
?

Ersetzt mir das quasi die "if-Abfrage" ?

Ich kenn das bisher nur, dass man über T(1) , T(2) ... die Elemente des Vektors T abgreifen kann.

Gibt es da irgendwas zum Nachlesen bzw. hat mir jemand noch die Erklärung parat?

Wäre cool zum Verständnis
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: 15.12.2012, 13:21     Titel:
  Antworten mit Zitat      
Hallo,

Code:

wählt die Teile von T aus, bei denen das zugehörige M>1 ist.

Such mal in der Hilfe nach "logical indexing".

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 13:31     Titel:
  Antworten mit Zitat      
Alles klar,dann informiere ich mich da mal... nun habe ich das gleiche für weitere Gleichungen gemacht, erhalte aber folgende Fehlermeldung:

Zitat:
Error using ./
Matrix dimensions must agree.

Error in Test (line 37)
p9(Ma9>1)=A(Ma9>1,1).*(T9./A(Ma9>1,2)).^(cp/R);


Heißt ja quasi, die Dimensionen der verwendeten Vektoren sind nicht gleich.

Wenn ich aber mit "whos" abfrage erhalte ich:

A 17932x2
L 1111x19
Ma9 17932x1
R 1x1
T 1x1111
T0 1x1
T9 17932x1
Tmax 1x1
X 1111x19
X_filtered 17932x1
Y 1111x19
Y_filtered 17932x1
cp 1x1

k 1x1
p 1x19
p0 1x1
p9 17932x1
pmax 1x1
w9 17932x1



Hier mal der untere Teil meines Codes:

Code:
p9=zeros(size(X_filtered));  
p9(:)=p0;                          
T9=A(:,2).*(p9./A(:,1)).^(R/cp);  
w9=sqrt(2*cp.*(A(:,2)-T9));      
Ma9=w9./sqrt(k*R.*T9);            


T9(Ma9>1) = (2./(k+1)).*A(Ma9>1,2);
p9(Ma9>1)=A(Ma9>1,1).*(T9./A(Ma9>1,2)).^(cp/R);


Hmm eigentlich sieht das doch richtig aus?
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: 15.12.2012, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

du musst immer filtern, also auch bei T9.
Für bessere Performance solltest du den Index einmal am Anfang erzeugen und dann verwenden:

Code:
idx = Ma9 > 1;
p9(idx)=A(idx,1).*(T9(idx)./A(Ma9>1,2)).^(cp/R);


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 77
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2012, 14:10     Titel:
  Antworten mit Zitat      
Juhu jetzt klappts!

Danke Harald, super Hilfe. Smile

Jetzt arbeite ich mal das Logical Indexing durch...
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.