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

Persistente Variable löschen

 

zevon
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2021, 15:46     Titel: Persistente Variable löschen
  Antworten mit Zitat      
Hallo,

kann mir jemand sagen, wie ich eine persistente Variable cleare?

Im Augenblick bleibt der Wert der persistenten Variable auch beim nächsten Run erhalten. Ich habe bereits

Code:


außerhalb der Funktion myFunction, die die persistente Variable enthält, probiert. Leider ohne Erfolg. Der Wert der persistenten Variable bleibt auch beim nächsten Run erhalten.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.04.2021, 16:20     Titel:
  Antworten mit Zitat      
Hallo,

meiner Erfahrung nach funktioniert diese Vorgehensweise. Es darf sich dabei nur nicht um eine lokale Funktion handeln (in derselben Datei wie eine Hauptfunktion).

Falls das nicht weiterhilft, bräuchte man ein konkretes Beispiel, um das Problem nachvollziehen zu können.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2021, 17:55     Titel:
  Antworten mit Zitat      
Okay, ich denke es handelt sich um eine lokale Funktion. Kann die Funkion dann anderweitig gecleart werden?

Ich versuch das mal mit dem Beispiel:

Code:

options = optimset( 'Display' , 'off' , 'UseParallel' , true , 'MaxIter' , 1000 );

[ alpha , ~ , exitflag ] = fminsearch( @myFunction , a , options , b , c );

.... %
.... %

function [ alpha ] = myFunction( a , b , c )

persistent x
if isempty( x )
    x = b;
end

alpha = a  + c + x;    % stark vereinfacht

x = alpha - 1;       % stark vereinfacht    

end


Damit will ich erreichen, dass die persistente Variable x beim ersten Durchlauf = a gesetzt wird und in allen weiteren Durchläufen entsprechend der Berechnung am Ende der vorherigen Iteration.

Das Problem ist, dass die persistente Variable x ihren Wert auch beim Beenden des Porgrammes behält und in den nächsten Run getragen wird.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bei lokalen Funktionen ist mir keine Lösung bekannt außer die Funktion in eine separate Datei zu schreiben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.04.2021, 21:36     Titel:
  Antworten mit Zitat      
Alles klar, Dankeschön!
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: 26.04.2021, 11:40     Titel:
  Antworten mit Zitat      
Hallo zevon,

Das ist mit einfachen Mitteln möglich:
Code:
function [ alpha ] = myFunction( a , b , c )
persistent x
if nargin == 0
  x = [];
  return;
end
if isempty( x )
    x = b;
end
...

Dann rufe die Funktion ohne Inputs zum initialisieren auf:
Code:
myFunction();

Eine Alternative ist, einen Befehl als ersten Input zu übergeben:
Code:
function [ alpha ] = myFunction( a , b , c )
persistent x
if ischar(a)
  switch lower(a)
    case 'clear'
       x = [];
    case 'get'
       alpha = x;
    otherwise
       error('Unknown command: %s', a);
  end
  return;
end

if isempty( x )
    x = b;
end
...

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2021, 12:27     Titel:
  Antworten mit Zitat      
Hallo Jan,

Danke, dein erster Ansatz funktioniert für mich! Ich habe dazu den ganzen Inhalt der Funktion in einen try-catch-Rahmen gesetzt, da die Funktion ja sonst zu einem Error führt, wenn ich ihr beim Aufrufen keine Argumente übergebe. Falls dir da noch was eleganteres zu einfällt bin ich interessiert, ansonsten ist die Frage damit vollständig beantwortet!

Danke allen, und viele Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
zevon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.07.2021, 12:33     Titel:
  Antworten mit Zitat      
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.