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

Wert von vorherigen Time Step nutzen

 

Raketenmaid
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 10:22     Titel: Wert von vorherigen Time Step nutzen
  Antworten mit Zitat      
Ich möchte ein paar numerische Unbestimmtheiten dadurch auffangen, dass ich in diesen Fällen auf Werte zurückgreife, die in dem Rechenschritt bestimmt wurden, bei dem zuletzt diese Unbestimmtheit nicht aufgetreten ist.

Konkret:
- Ich berechne die zwei Winkel eines Vektors im Bezug auf ein Koordinatensystem, welche den Vektor räumlich festlegen.
- Nun kann es passieren, dass der Vektor parallel zu einer der drei Koordinatenachsen wird oder in Extremfällen eine Länge von Null hat.
- In diesem Fall ist einer der beiden Winkel oder - im Extremfall - beide Winkel unbestimmt.

Nun möchte ich gerne, dass wenn einer der beiden Winkel (oder beide) unbestimmt werden, für diesen Rechenschritt mit dem alten Wert für den Winkel weitergerechnet wird.

Ich habe es mal mit dem Data Store Blöcken versucht, aber ich bekomme da nur wirre Warnhinweise und das Ding scheint sich im Kreise zu drehen (also die Simulation).

Nun ist es so, dass die betreffenden Winkel bestimmt werden und dahinter habe ich ein Data Store Write Block gesetzt und somit den Wert in den Data Store Block geschrieben.

Mit einem Data Store Read Block füttere ich den aufbewahrten Wert in die Funktion ein, die mir den Winkel bestimmt und mache eine if Abfrage. Diese soll bewirken, dass, falls der Sonderfall eintritt, mit dem Wert auf dem Data Store Block weiter gerechnet wird. Im Normalfall wird der Winkel wie gehabt berechnet.

Mache ich etwas falsch?

Gibt es einen geschickteren Weg, mein Ziel zu erreichen?
Private Nachricht senden Benutzer-Profile anzeigen


knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 11:22     Titel:
  Antworten mit Zitat      
Spricht was gegen den Memory-Block?

Oder die Berechnung am besten gleich in einem Matlab Function-Block durchführen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Raketenmaid
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 28.09.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 12:29     Titel:
  Antworten mit Zitat      
Ich weiß nicht, welchen Memory Block Du meinst.

Ich habe bislang den Data Store Memory Block in Verbindung mit dem Data Store Write and Data Store Read Blöcken benutzt.

Wie ginge das denn mit einer Matlab Funktion? Mit welchem Befehl kann ich den Wert aus dem vorherigen Simulationsschritt denn aufbewahren?
Private Nachricht senden Benutzer-Profile anzeigen
 
knilumis_baltaM
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 20.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.12.2012, 12:38     Titel:
  Antworten mit Zitat      
Also vom Prinzip her (Memory block) so wie im Bild (siehe Anhang).

In die Matlab-Function schreibst du:

Code:
persistent last_value;
if isempty(last_value)
      last_value = 0;
end


jetzt kannst du am ende deine codes:

last_value = irgendein wert zu speichern;

schreiben und der der Wert ist im nächsten Schritt verfügbar.

save_last_step.png
 Beschreibung:

Download
 Dateiname:  save_last_step.png
 Dateigröße:  86.82 KB
 Heruntergeladen:  761 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 19.12.2012, 13:21     Titel:
  Antworten mit Zitat      
Ich würde es mit einem RS-FlipFlop + Switch und Delay versuchen.
Der/Die Eingangswinkel werden auf richtigkeit geprüft.
Wenn Richtig -> FF setzen
Wenn Falsch -> FF Rücksetzen

Das Flipflop fungiert als Schaltbedingung für den Switch.
Der Switch schiebt immer den Eingangswinkel direkt durch, gleichzeitig wird dieser dannach aber auch in ein Delay gepackt.

Wenn nun die Bedinung nicht ok ist, wird vom FF eine 0 kommen -> der Switch schaltet nicht mehr den aktuell anliegenden Winkel, sondern den von einem Schritt vorher durch.

Fertig.

Siehe bild als Skizze.

test.PNG
 Beschreibung:

Download
 Dateiname:  test.PNG
 Dateigröße:  19.12 KB
 Heruntergeladen:  749 mal

_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
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.