Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Gewöhnliche Differentialgleichungen

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Funktion schreiben / y letzten Wert behalten

 

Joe01
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.12.2020, 19:47     Titel: Funktion schreiben / y letzten Wert behalten
  Antworten mit Zitat      
Hallo zusammen,

leider komme ich bei einer Sache nicht weiter und hoffe ich könntet mir helfen.

Ich will eine Funktione schreiben mit folgender Logik.

Der Einganswert ist eine berechnete Funktion die zwischen 1 und 0 sich hin und her bewegt.
Wenn der Eingabewert größer als 0.8 ist dann soll Ausgabewert 0 sein.
Wenn der Eingabewert kleiner als 0.4 ist dann soll Ausgabewert 1 sein
Wenn der Eingabewert sich dazwischen befindet ändert sich der Ausgabewert nicht.

Nun weiß ich nicht wie ich schreiben soll das der Ausgabewert den letzen Wert nicht verändert. Gibt es ein Komando dazu das y den letzten Wert behält?

Mein Versuch:

function y= Name(u)

Einganswert = u(1);

if (Eingangswert > 0.01 *0.Cool
y=0 ;
elseif (Eingangswert < 0.01 * 0.4)
y=1
else ?????

end
end

Liebe Grüße Joe
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

wenn ich die Frage richtig verstehe, benötigst du eine statische Variable. In MATLAB gibt es dafür das Schlüsselwort persistent.

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
 
Joe01
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 17:47     Titel:
  Antworten mit Zitat      
Danke für die Antwort.
Wenn ich persistent allerdings richtig verstehe, dann wird der y Wert beim nächsten Aufruf gespeichert, bedeutet doch auch das der Ausgabewert y, wenn er beim ersten Aufruf mit1 verlassen hat beim zweiten mal wieder in die Bedinung kleiner 0.4 Gerät, dann 2 ist?



BTW. mein Code ist unten fehlerhaft statt 0.01 soll natürlich es 1 heißen

Grüße
Joe
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 22.649
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2020, 18:12     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe die Rückfrage nicht. Warum sollte der Wert 2 werden?
Probier's doch mal - sind ja nur ein paar Zeilen, die man anpassen muss.

Ein Problem sehe ich höchstens darin, was du machst, wenn der erste Eingabewert " sich dazwischen befindet" - dann gibt es doch keinen vorherigen Ausgangswert?

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
 
Joe01
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 28.05.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 20:02     Titel:
  Antworten mit Zitat      
Ok das mit dem Wert 2 bitte vergessen, das war ein Verständnisfehler von mir.

Habe Testweise diese Funktion geschrieben.

function y= test(u)

a = tippe ich selber ein
persistent x;
if (a > 1 *0.7)
x=0 ;
elseif (a < 1 * 0.3)
x=1;
else x=x;

end
y=x;

end

Selbst wenn der erste Eingabewert größer als 0.7 oder kleiner als 0.3 ist und ich danach einen Zwischenwert z.B 0.5 eingebe, wird y leer ausgegeben.
Ich entedecke den Fehler nicht, habt ihr einen Hinweis?

Grüße Joe
Private Nachricht senden Benutzer-Profile anzeigen
 
ueg
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 15.08.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2020, 20:32     Titel:
  Antworten mit Zitat      
Edit: Ich glaube hier oben stand Blödsinn..

Oder falls ich das falsch verstanden habe, was du mit dem x vor hast, dann speichere x zur Not in deinem Hauptscript ab und übergebe den aktuellen Wert mit in die Funktion als [y, xausgabe]=test(u,xeingabe);

Edit: also bei mir funktioniert das Ganze so, wobei man für meine Begriffe das "else x=x" auch weglassen könnte.
Code:
function y = test(a)

    %UNTITLED Summary of this function goes here
    %   Detailed explanation goes here
    % a =1;
    persistent x;

    if a > 0.7
        x = 0;
    elseif a <0.3
        x=1;
    else
        x=x;
    end
    y=x;
end
 


Nächster Edit:
Wie meinst du das mit "a ändere ich selber ab"?
Wenn du die Funktion zum Abändern von a editierst und dann automatisch neu speicherst wenn du sie aufrufst, verschwindet meines Wissens nach auch eine "persistente" Variable.
Ich denke, dass hier dein Fehler liegt.
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.