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

Schleifenbedingung: zugewiesener Wert einer Variable ändert

 

tnam
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2020, 09:10     Titel: Schleifenbedingung: zugewiesener Wert einer Variable ändert
  Antworten mit Zitat      
Hallo zusammen,

ich erhalte für die Variable "ID" verschiedene Identitätsnummern als Werte. Diese möchte ich zu Nutzen machen. Nämlich soll eine Schleife dann durchlaufen werden, wenn der zugewiesene Wert für ID sich ändert. Also für jede ID 1 mal die Schleife durchlaufen.

Wie kriegt man es hin, dass man den aktuellen Wert von "ID" mit dem vorherigem Wert - der ja nun quasi nicht mehr existiert, da er überschrieben wurde - vergleichen kann?

Danke für jede Antwort und Tricks & Tipps
LG
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 19.08.2020, 11:50     Titel: Re: Schleifenbedingung: zugewiesener Wert einer Variable än
  Antworten mit Zitat      
Hallo tnam,

Zitat:
Wie kriegt man es hin, dass man den aktuellen Wert von "ID" mit dem vorherigem Wert - der ja nun quasi nicht mehr existiert, da er überschrieben wurde - vergleichen kann?

Indem man ihn nicht überschreibt.
Code:
last = NaN;
for k = 1:100
   value = randi([1,3]);  % Random integer between 1 and 3
   if value == last
     fprintf('Repeted: %d\n', value);
   else
     fprintf('New: %d\n', value);
     last = value;  % <== store the former value here
   end
end

Hilft das weiter? Wenn nicht, poste den relevanten Teil deines Codes. Das wäre klarer als die Beschreibung als Text.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
tnam
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2020, 14:21     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort Jan!

Leider nicht wirklich die Lösung zu meinem Problem. Ich versuche es mal nochmal gründlich zu erklären..

Im beigefügtem Bild sieht man das Simulink und Stateflow Modell. Je nach Input-Größe u wechselt das Stateflow Modell seine States/Zustände. Je nachdem welcher Zustand aktiv ist, erhalte ich andere Werte für definierte Variablen d, f1, f2, t_R, t und state.

Hinter dem Stateflow Chart ist ein MATLAB Function Block nachgeschaltet. Der wertet die Output-Größen von Stateflow als eigene Input-Größen.

Nun sollen bestimmte Mathe Operatoren durchgeführt werden. Der Code sieht wie folgt aus:

Code:

function [s_EZ, ID] = Algorithmus(d,f1,f2,t,t_R,state)

if d==0  % Bedingung um Faktor k zu bestimmen
    k=-1;
else
    k=1;
end

if f1~=f2  % eigentliche Rechenoperation
    s_R=0.5*(abs(f2-f1)/t_R)*t^2*k;
else
    s_R=f1*t*k;
end

persistent a  % Variable a definieren und =0 setzen
if isempty(a)
    a=0;
end

s_EZ=s_R+a;  % s_EZ soll die Summe aller jemals berechneten s_R sein
a=s_EZ;  % a wird dann der Wert von s_EZ zugewiesen um darauf den neuen s_R-Wert zu addieren.

 


Nun, das Problem liegt eventuell auch bei Stateflow. Laut meiner Logik soll für jeden Zustand der entsprechend zurückgelegte Weg berechnet werden, sodass s_EZ (die Summe aller s_R) die Echtzeitposition des Systems abbildet.

Gehe ich aber das Modell Step-weise durch, so wird der Wert von s_R bei jedem Step addiert. Ein Step entspricht 0.2 Sekunden (wahrscheinlich abhängig von Stateflow).

Deshalb möchte ich die Zusatzbedingung einbringen, dass der Wert nur dann addiert wird, wenn sich der "state"-Wert ändert. Somit kann ich sicher gehen, dass der Weg eines States nicht mehrmals summiert wird.

Ich hoffe die ausführliche Beschreibung hilft weiter. Besten Dank!

MF_Bsp.JPG
 Beschreibung:

Download
 Dateiname:  MF_Bsp.JPG
 Dateigröße:  89.1 KB
 Heruntergeladen:  179 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du brauchst also den state der vorherigen Blockauswertung? Dann würde ich das in einer Variable, z.B. state_old abspeichern und diese Variable als persistent deklarieren.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
tnam
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 10.08.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2020, 18:41     Titel:
  Antworten mit Zitat      
Danke Harald,

ich habe mittlerweile den Matlab Function Block durch ein Simulink Modell ersetzt. Dazu habe ich einfach den Memory Block genutzt.

Dennoch besten Dank für die Antwort. Ich komme bestimmt darauf zurück um das Modell zu optimieren.
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.