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

Mathematik-Online-Kurs: MATLAB - Weitere Datentypen

Strukturen


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

Strukturen ermöglichen die Zusammenfassung mehrerer Teilvariablen (in MATLAB als Felder bezeichnet) zu einer Sammelvariablen. Sie können mit Hilfe der Funktion struct oder durch direkte Zuweisung erzeugt werden. Beispiel hierfür sind die folgenden unter dem Sammelnamen S gespeicherten Daten zu einer Studentin:
  >> S=struct('Name','Belinda Beispiel','Matrikelnr',1234567,...
              'Noten',[1.3 1.0 1.7])
  S =
            Name: 'Belinda Beispiel'
      Matrikelnr: 1234567
           Noten: [1.3000 1 1.7000]

  >> whos S
    Name      Size                    Bytes  Class
    S         1x1                       436  struct array
  Grand total is 23 elements using 436 bytes
Die Felder der Struktur S sind Name, Matrikelnr und Noten. Ihr Inhalt kann mit Hilfe der Syntax Sammelvariable.Feld angesprochen werden.

Strukturvariablen gleichen Aufbaus können wiederum zu Arrays beliebiger Dimension zusammengefasst werden. Indizierungsangaben sind dabei zwischen dem Namen der Sammelvariablen und dem Punkt anzugeben. Zuweisungen auf nicht vorhandene Elemente des Arrays oder Felder bewirken ein automatisches Auffüllen der Feldinhalte mit leeren Matrizen.

Spezielle Funktionen für Strukturen sind unter anderem:

 Erzeugung/Manipulation von Strukturen
   struct Erstellen von Strukturvariablen
   setfield, getfield Setzen und Auslesen von Feldern
   isfield, isstruct Indikatorfunktionen für Felder/Strukturen
   rmfield Löschen eines Feldes
   orderfields Sortierung der Felder

(Autoren: Hörner/Wipper)

Downloads:

( .m, 827 ,  27.03.2007)
( .m, 373 ,  27.03.2007)

(Beschreibung der Dateitypen)


Definition und Erweiterung einer Struktur mit automatischem Auffüllen:
  >> S=struct('Name','Belinda Beispiel','Matrikelnr',1234567,...
              'Noten',[1.3 1.0 1.7])
  S =
            Name: 'Belinda Beispiel'
      Matrikelnr: 1234567
           Noten: [1.3000 1 1.7000]
  >> S(3).Name='Emil Exempel'; S(3).Matrikelnr=7654321
  S =
  1x3 struct array with fields:
      Name
      Matrikelnr
      Noten

Indizierung von Elementen und Feldern:

  >> S(3)
  ans =
            Name: 'Emil Exempel'
      Matrikelnr: 7654321
           Noten: []
  >> S(2)
  ans =
            Name: []
      Matrikelnr: []
           Noten: []
  >> S(2).Matrikelnr=1223334;
  >> S([1 3])
  ans =
  1x2 struct array with fields:
      Name
      Matrikelnr
      Noten
  >> S([1 3]).Name
  ans =
  Belinda Beispiel
  ans =
  Emil Exempel
Man beachte, dass bei der letzten Indizierung zwei Rückgabewerte entstehen. Diese werden sukzessive der Standardvariablen ans zugewiesen, weshalb diese nur noch den letzten Wert 'Emil Exempel' enthält.

Zuweisung mehrerer Rückgabewerte:

  >> [S.Matrikelnr]
  ans =
       1234567     1223334     7654321
  >> {S.Name}
  ans =
      'Belinda Beispiel'     []    'Emil Exempel'
  >> [N1,N2,N3]=S.Name
  N1 =
  Belinda Beispiel
  N2 =
       []
  N3 =
  Emil Exempel
Sofern die Inhalte eines Feldes Matrizen gleicher Größe sind, können diese wie in der ersten Befehlszeile gezeigt, durch Klammerung mit [ ] zu einer Matrix zusammengefasst werden. Bei Feldinhalten unterschiedlichen Datentyps können mehrere Rückgabewerte stets durch Klammerung mit { } zu einer Cell zusammengefasst werden.

Ebenso möglich sind Zuweisungen auf mehrere Variablennamen. Diese sind auf der linken Seite einer Anweisung durch [ ] geklammert anzugeben. Die Zahl der Variablen muss dabei mit der Anzahl der Rückgabewerte der rechten Seite übereinstimmen.

Sortieren und Löschen von Feldern:

  >> S(2).Fach='Mathematik';
  >> S(1)
  ans =
            Name: 'Belinda Beispiel'
      Matrikelnr: 1234567
           Noten: [1.3000 1 1.7000]
            Fach: []
  >> orderfields(S)
  ans =
  1x3 struct array with fields:
      Fach
      Matrikelnr
      Name
      Noten

  >> rmfield(S,'Name')
  ans =
  1x3 struct array with fields:
      Matrikelnr
      Noten
      Fach
  >> S
  S =
  1x3 struct array with fields:
      Name
      Matrikelnr
      Noten
      Fach
Der Befehl orderfield sortiert die Felder einer Struktur in alphabetischer Reihenfolge. Mit rmfiled können Felder von Strukturen gelöscht werden. In beiden Fällen ist darauf zu achten, dass die Funktionen nicht direkt auf der Struktur operieren, sondern nur auf einer Kopie. Daher ist ggf. das Resultat der Strukturvariablen selbst wieder zuzuweisen (z.B. S=rmfield(S,'Name')).
(Autoren: Hörner/Wipper)

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

  automatisch erstellt am 5.2.2008