Mo Logo [Home] [Lexikon] [Aufgaben] [Tests] [Kurse] [Begleitmaterial] [Hinweise] [Mitwirkende] [Publikationen]

Mathematik-Online-Kurs: MATLAB - Programmierung

Globale und persistente Variablen


[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

Die innerhalb von Funktionen verwendeten Variablen haben lokalen Charakter, d.h. sie sind für andere Funktionen nicht ,,sichtbar`` und werden beim Verlassen der Funktion automatisch gelöscht. Im Gegensatz dazu besitzen die mit
global Variablenname(n)
deklarierten Variablen eine globale Gültigkeit, d.h. es kann funktions- und laufzeitübergreifend auf eine Variable zugegriffen werden.

Die mittels

persistent Variablenname(n)
definierten persistenten Variablen haben nur innerhalb der Funktion, in welcher sie definiert werden, einen globalen Charakter. D.h. sie werden beim Verlassen der Funktion nicht gelöscht, stehen aber anderen Funktionen nicht zur Verfügung.

Bei der ersten Deklaration einer globalen bzw. persistenten Variablen wird diese von MATLAB als leere Matrix initialisiert. Bei Operationen mit globalen bzw. persistenten Variablen ist daher ggf. zunächst mittels if isempty( Variablenname) der Status zu prüfen.

Werden die globalen Daten nur innerhalb ein und derselben Funktion, aber über mehrere Aufrufe hinweg benötigt, so ist die Initialisierung mit persistent der mit global vorzuziehen, da es zu keinen Namenskonflikten kommen kann. Im Gegensatz dazu können mit global deklarierte Variablen auch von anderen Funktionen manipuliert werden, sofern gewollt oder ungewollt die gleichen Vairablennamen verwendet werden.

(Autoren: Hörner/Wipper)

Definiert wird die folgende Funktion fa:
  function fa
  persistent PVAR
  global GVAR
  GVAR=GVAR+1;
  if isempty(PVAR)
    PVAR=1;
  else
    PVAR=PVAR+1;
  end
  fprintf('Funktion fa: PVAR=%d, GVAR=%d\n',PVAR,GVAR);   
Diese Funktion verwendet die persistente Variable PVAR und die globale Variable GVAR. Mit Hilfe der if-Bedingung wird auf den Fall reagiert, dass PVAR nach der ersten Deklaration eine leere Matrix ist. Bei GVAR wird davon ausgegangen, dass sie bereits als natürliche Zahl definiert wurde. Die Funktion erhöht beide Variablen um 1 und gibt dann die jeweiligen Werte aus.

Analog dazu wird eine zweite Funktion fb definiert, in der ebenfalls die persistente Variable PVAR und die globale Variable GVAR verwendet werden:

  function fb
  persistent PVAR
  global GVAR
  GVAR=GVAR+1;
  if isempty(PVAR)
    PVAR=1;
  else
    PVAR=PVAR+1;
  end
  fprintf('Funktion fb: PVAR=%d, GVAR=%d\n',PVAR,GVAR);   

Ausgabe eines Testlaufs:

  >> global GVAR
  >> GVAR=0;
  >> fa, fa, fb, fa, fb
  Funktion fa: PVAR=1, GVAR=1
  Funktion fa: PVAR=2, GVAR=2
  Funktion fb: PVAR=1, GVAR=3
  Funktion fa: PVAR=3, GVAR=4
  Funktion fb: PVAR=2, GVAR=5
Zunächst wird in der Befehlsumgebung die globale Variable GVAR deklariert und auf 0 gesetzt. Anschließend werden die Funktionen fa und fb mehrfach aufgerufen. Wie an der Ausgabe zu erkennen ist, kann der Wert der globalen Variablen sowohl in der Befehlsumgebung, als auch von beiden Funktionen geändert werden. Im Gegensatz dazu haben die persistenten Variablen (trotz gleicher Variablennamen) nur innerhalb der jeweiligen Funktion Gültigkeit. Somit gibt GVAR die Anzahl aller Funktionsaufrufe und PVAR die Anzahl der jeweiligen Funktionsaufrufe von fa und fb wieder.
(Autoren: Hörner/Wipper)

[vorangehende Seite] [nachfolgende Seite] [Gesamtverzeichnis][Seitenübersicht]

  automatisch erstellt am 5.2.2008