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

Variable überschreiben

 

*ich

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 12:44     Titel: Variable überschreiben
  Antworten mit Zitat      
Ich komme einfach nicht weiter: Mein Matlab-Programm wird immer wieder durchlaufen. Ich möchte nun eine Variable erstellen, die die Programm durchläufe zählt.
Also z.b : z=1;
Wenn jedoch das Programm wieder durchlaufen wird wird z wieder auf eins gesetzt. Wie kann ich das machen, dass z überschrieben wird und inkrementiert wird.
Ich hoffe mein Problem ist einigermaßen verständlich.

Ich danke euch
Viele grüße


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 25.02.2010, 12:56     Titel:
  Antworten mit Zitat      
So was?

Code:

z=0;
for k=1:10
   disp('bla')
   z=z+1
end
 


Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.02.2010, 12:58     Titel:
  Antworten mit Zitat      
Hallo

mir ist nicht klar, wie dein Programm aufgerufen wird? Ist das eine Funktion, Script?
Wo z definiert wird?
Bitte mehr Info!!!!

vielleicht hilft dir aber das schon weiter (in scripts)
Code:

if ~exist('z','var')
  z=1
else
  z=z+1
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
*ich

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 14:57     Titel:
  Antworten mit Zitat      
Also ich habe ein Hauptprogramm

z=1;
function1(...);
function(...);


jedesmal wenn funktion1 aufgerufen wird soll z in dieser funktion inkrementiert werden.
Das Problem ist aber, dass jedes mal wenn das programm wieder in das Hauptprog springt, z wieder auf eins gesetzt wird.

Ich hoffe, dass es besser verständlich ist.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.02.2010, 15:12     Titel:
  Antworten mit Zitat      
Also im Hauptprogramm initialisierst du z=1,
dann übergibst du wahrscheinlich den z-Wert an die funktion1.
Wenn ja dann sollst du inkrementierten Wert wieder zurückgeben

Code:

z=1;
z=function1(z);
function(...);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
*ich

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 15:35     Titel:
  Antworten mit Zitat      
ja ich glaube das fehlt mir. aber ich übergebe einige parameter an die fkt. Wie kann ich denn nur auf z zugreifen?

Entschuldigt, dass ich solche fragen stelle, aber matlab ist absolutes neuland für mich.

Vielen Dank dass iihr euch die zeit nehmt mir zu helfen
 
Jan*
Forum-Century

Forum-Century


Beiträge: 178
Anmeldedatum: 06.11.09
Wohnort: ---
Version: R2007b
     Beitrag Verfasst am: 25.02.2010, 16:40     Titel:
  Antworten mit Zitat      
Du musst z einfach in die Liste der Übergabeparameter hinzufügen, z dann in der funktion wie gewohnt verändern, und als Rückgabeparameter wieder an die Hauptfunktion zurückgeben. Bei sehr vielen Funktionen ist das aber eine ewige hin und rückreicherei, da könntest du mit evalin auch direkt auf der Variable im Workspace der Hauptfunktion schreiben:

Code:
evalin('caller', 'z=z+1');


bzw.

Code:
assignin('caller', 'z',z+1)


Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.02.2010, 16:56     Titel:
  Antworten mit Zitat      
Ehrlich gesagt ist nicht ganz klar, wo du Schwierigkeiten hast, mache doch bitte einen Beispiel.

Wie rufst du in Haupt-Funktion deine Unterfunktion?
Wie sieht denn genau dein Konstrukt aus?
Rufst du diese Unterfunktion in der schleife?


Du kannst z.b einfach den Ergebnis in Workspace zwischenspeichern.
Code:

function  main_fcn()

function1();

if evalin('base','exist(''z'',''var'')')
   z = evalin('base','z');
   fprintf('Die Funktion wurde bereits %d Mal aufgerufen\n',z);
end

function function1()

if evalin('base','~exist(''z'',''var'')')
   z=1;
else
   z = evalin('base','z');
   z=z+1;
end
assignin('base','z',z);
 


sonst mache es einfach über Persistenz
z.B so:
Code:

function  main_fcn()
persistent z;
if isempty(z)
   z=0;
end
z = function1(z);
fprintf('Die Funktion wurde bereits %d Mal aufgerufen\n',z);


function z = function1(z)

 z=z+1;

 
Private Nachricht senden Benutzer-Profile anzeigen
 
*ich

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2010, 17:07     Titel:
  Antworten mit Zitat      
Jungs ich danke euch!!!
Ich habe das jetzt so gemacht wie Jan vorgeschlagen hat und es funktioniert. Vielen 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 - 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.