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

Vergleich von 2 vektoren in if-bedingung

 

comici

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.10.2015, 13:32     Titel: Vergleich von 2 vektoren in if-bedingung
  Antworten mit Zitat      
hallo,

ich möchte in einer if-Bedingung zeilenweise die Werte zweier Vektoren vergleichen. Wenn dann bspw. für Zeile 1 die Bedingung erfüllt ist, wird die if-Schleife für Zeile 1 ausgeführt. Wenn aber für Zeile 2 die Bedingung nicht erfüllt ist, soll 'else' bedient werden

Code:
%
a = [4;5;6;7]
b = [0;8;2;11]

   if  a > b
      dtau = G*deps;      %Spannungsänderung bei Entfestigung
      tau = tau + dtau;       %Aktualisierung Spannung
   
   else
      dtau = 0;      
      tau = tau + dtau;      
 


Wenn b ein Skalar ist, funktioniert es, aber beim Vergleich zweier Vektoren wird die if-Bedingung anscheinend ignoriert und mit 'else' fortgefahren. Habt ihr eine Idee, wie sich dieses Problem lösen lässt. Vielen Dank für Eure Hilfe.


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 29.10.2015, 14:15     Titel:
  Antworten mit Zitat      
das ist das erwartete verhalten und steht auch so in der doc
Zitat:
An expression is true when its result is nonempty and contains only nonzero elements (logical or real numeric).

du kannst mit einer schleife arbeiten oder gleich mittels logischer operationen.
Code:
tau=tau+(a>b)*dtau
so in der art
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
comici

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 00:18     Titel:
  Antworten mit Zitat      
danke erstmal für die Antwort. Leider versteh ich es noch nicht ganz. Meine if-Bedingung ist nur Teil einer while Schleife, die wie folgt aussieht

Code:
%
i=2;  
while  (i<imax)
     
   if  Strain > eps_peak
      dtau = G2*deps;  
      tau = tau + dtau;      
   
   else
      dtau = G1*deps;    
      tau = tau + dtau;
   end

i=i+1;
end

 


Müsste ich also G2 bzw. G1 von der Bedingung a>b bzw a>b abhängig machen? Macht man das mit Hilfe einer function? Danke
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.10.2015, 00:24     Titel:
  Antworten mit Zitat      
i taucht in der schleife garnicht auf. daher verstehe ich ihren sinn nicht. auch die if bedingung von vorher tritt nirgends auf. ich kann dir da nicht folgen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
comici

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 00:56     Titel:
  Antworten mit Zitat      
Ich habe mehrere Punkte, für die ich die selbe Berechnung durchführen will. Daher habe ich mir Vektoren gebaut, die die Informationen enthalten. Die Berechnung soll laufen bis Strain_max erreicht ist. Wenn aber für einen der Werte im Strain-Vektor 'Strain > eps_peak' erfüllt ist, soll die if-Bedingung ausgeführt werden.

Code:

Strain = [1;1;1;1]
eps_peak = [0.5;0.8;2.1;2.2]

deps = 0.001
Strain = 0;
Strain_max = 5
tau = 2
 
while  Strain<Strain_max
     
   if  Strain > eps_peak
      dtau = G2*deps;  
      tau = tau + dtau;      
   
   else
      dtau = G1*deps;    
      tau = tau + dtau;
   end

i=i+1;
end

 


Das läuft auch soweit, nur das if-Bedingung, wenn ich zwei Vektoren vergleichen möchte, funktioniert eben nicht. Aber kann/soll es wahrscheinlich auch nicht laut doc (siehe oben).
 
comici

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 01:09     Titel:
  Antworten mit Zitat      
nochmal der code...

Code:


numlam = 4
Strain = [1;1;1;1]
eps_peak = [5.5;5.8;2.1;2.2]
tau = [2;3;4;5]
deps = 0.001*ones(numlam,1);  
Strain_max = 10*ones(numlam,1);    

 
while  Strain<Strain_max
     
   if  Strain > eps_peak
      dtau = G2*deps;  
      tau = tau + dtau;
      Strain = Strain + deps;      
   
   else
      dtau = G1*deps;    
      tau = tau + dtau;
      Strain = Strain + deps;

   end

end

 


Danke!
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.10.2015, 09:18     Titel:
  Antworten mit Zitat      
wie ich bereits sagte kannst du das mit einer for schleife für jedes element durchlaufen.
alternativ kann man aber das ganze auch berechnen. dein code macht ja nix kompliziertes. das ist ja nur wie viel mal muss ich deps addieren bis ich bei strain_max bin. das sollte sich mittels divison berechenen lassen. und das kannst du als matrix machen.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
comici

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.10.2015, 12:58     Titel:
  Antworten mit Zitat      
Vielen Dank!
 
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.