Navigation

Datenstrukturen

A) Datenstrukturen

B) Anwendungsbeispiel: Stimulation in einem psychophysikalischen Experiment

A) Datenstrukturen

T9A1) Beim Beispiel der Katzen im Tierheim haben wir gesehen, dass es noetig sein kann, verschiedene Arten von Daten so bereitzuhalten, dass man sie aufeinander beziehen kann. Wir haben dort mehrere Vektoren bzw Matrizen benutzt. Diese Vorgehensweise funktioniert, ist aber nicht ungefaehrlich: Laden Sie die Daten ueber die Katzen noch einmal ein: [katzen.mat]

Sortieren Sie die Katzen nach ihrem Alter. Was ist dann ausserdem noetig, damit Sie die Anderen Daten ueber die Katzen noch abfragen koennen? 

T9A2) Um alle Daten beieinander zu halten, fuehrt man in Matlab eine Struktur ein.  Eine Struktur besteht aus mehreren Feldern, die verschiedene Datentypen besitzen koennen.  Beispielsweise koennte man fuer die Verwaltung einer Maeusezucht folgende Struktur benutzen. Die erste Maus erzeugt man mit:

maus.ohrmarke='M7777';
maus.kaefig=5;
maus.weiblich=true;
maus.wurfgroessen=[5 8 7];

Lassen Sie sich ausgeben, was gespeichert ist unter maus, maus.kaefig und maus.wurfgroessen(2)

Um eine weitere Maus hinzuzufuegen, muss man dieser einen Index mitgeben:

maus(2).ohrmarke='M7735';
maus(2).kaefig=9;
maus(2).weiblich=true;
maus(2).wurfgroessen=[13 4 10 9];

Denken Sie sich ein paar weitere Maeuse aus und lassen Sie sich ausgeben:
maus
Die Kaefignummern der Maeuse 1 bis 4
Die Groesse des jeweils ersten Wurfs der ersten 3 weiblichen Maeuse. 

Irgendwann segenen Maeuse das Zeitliche. Schreiben Sie eine Funktion, die bei Angabe der Ohrmarke den richtigen Eintrag in der Struktur maus loescht. 

[Kursloesung: maus_verwaltung.m] 

T9A3) Denken Sie sich eine Struktur fuer die Katzendaten aus, und setzen Sie die Vektoren in die Struktur um (natuerlich nicht durch Eintippen aller Daten!).

T9A4) Nah verwandt mit Strukturen sind die sogenannten cell arrays. Mit diesen kann man Listen von Variabelen verschiedener Typen verwalten. Wir wollen nur in einem Spezialfall behandeln: Die Funktionen varargin und varargout ermoeglichen es einer Funktion eine variable Anzahl von Eingabe- oder Ausgabeargumente zu haben.  Man benutzt sie z.B. folgendermassen:

function [varargout]=testvar(varargin)
for i=1:length(varargin)    %Schleife ueber alle Eingabeargumente
   x(i)=varargin{i};             %die Eingabeargumente werden in einen Vektor geschrieben
end

for i=1:nargout                 %Schleife ueber die Ausgabeargumente, nargout ist deren                                                 %Anzahl, diese Variable wird automatisch von varargout gestzt
  varargout{i}=2*x(i);
end

Benutzen Sie diese Funktion mit [a b c]=testvar(1, 2, 3,4). Probieren Sie auch andere Kombinationen aus Ein- und Ausgabeargumenten aus.

Dieses Beispiel ist eigentlich ein recht schlechtes, da es ausschliesslich fuer Variablen vom Typ double funktioniert. Erweitern Sie es so, dass alle Variablen aller anderer Datentypenunveraendert wieder ausgegeben werden.

[Kursloesung: testvarMOD.m]

B) Anwendungsbeispiel: Stimulation in einem psychophysikalischen Experiment

 T9B1) Ein Beispiel fuer eine visuelle Stimulation in einem einfachen psychophysikalischen Experiment ist in der demo [zufallsquadrate.m] gezeigt.
Schauen Sie sich dieses Programm an und probieren Sie es aus. Fuehren Sie schrittweise folgende Aenderungen an dem Programm durch:

a) Bestimmen Sie bei jedem "Sprung" eine zufaellige Farbe, die dem neuen Quadrat zugewiesen wird.

b) Lassen Sie die Dauer der Pause als weiteres Argument durch den Benutzer angeben.

c) Nehmen Sie die Benutzerangabe der Pause als Maximalwert und bestimmen Sie jede
individuelle Pause zufaellig zwischen 0s und diesem Maximalwert.

d) Machen Sie die Benutzereingabe der Pause optional. Wenn der Benutzer einen Pausenwert eingibt, wird dieser benutzt, sonst wird 2sec als defaultwert verwendet.

e) Aendern Sie die Wahrscheinlichkeit der Position von einer Gleichverteilung zu einer Normalverteilung rund um die Mitte der Abbildung.

[Kursloesung: zufallsquadratejf.m] 

[Kursloesung mit einem kleinen Fehler: zufallsquadrate_mm.m] 

T9B2) Haeufig moechte man die genauen Parameter wissen, die bei einer Stimulation benutzt wurden, entweder um einen Versuch zu reproduzieren, oder um ihn exakt auswerten zu koennen. Dies ist insbesondere fuer zufaellige Reizungen sehr wichtig.
Eine gute Moeglichkeit, die verschiedenen Parameter uebersichtlich zu speichern, ist die Einfuehrung einer Struktur, die alle wichtigen Angaben enthaelt. Waehrend das Programm laeuft, wird diese Struktur gefuellt und im Anschluss an den Programmablauf abgespeichert. Eine entsprechende Version der zufallsquadrate Stimulation finden Sie in [zufallsquadrate_speicher.m]. Eingeladen und reproduziert werden diese Daten mit [zufallsquadrate_laden.m]. Schauen Sie sich beide Programme an und versuchen Sie nachzuvollziehen, wie mit der Struktur umgegangen wird.

a) Im Moment werden die Parameter immer unter dem Namen 'zufquadparameter.mat'
abgespeichert, so dass diese Datei bei mehrfachem Aufrufen ueberschrieben wird.
Aendern Sie die Funktion zufallsquadrate_speicher so, dass der Benutzer als Argument einen Dateinamen seiner Wahl angeben kann.

b) Erweitern Sie die Funktion so, dass der Benutzer einen Dateinamen angeben kann (der dann auch zum Speichern verwendet wird) oder nicht.
Wenn kein Dateiname angegeben wird, speichert die Funktion die Parameter in die Datei 'standard.mat'

c) Weisen Sie wie in der letzten Aufgabe dem Quadrat jeweils eine zufaellige Farbe zu, die ebenfalls jeweils mit abgespeichert wird. 

d) Erweitern Sie Ihre Funktion um ein zusaetzliches Argument, mit dem man waehlen kann, ob man zufaellige Zahlen haben moechte, oder ausschliesslich rote, blaue und gruene Quadrate. Wenn diese zweite Option gewaehlt wird, sorgen Sie dafuer, dass diese drei Farben in zufaelliger Reihenfolge auftreten, aber jede der Farben gleich oft gezeigt wird (bzw eine Farbe einmal haeufiger oder seltener auftritt, wenn die Anzahl der Wiederholungen nicht durch 3 teilbar ist.)

[Kursloesung: zufallsquadrate_speicher_MK.m]

[Kursloesung: zufallsquadrate_laden_MK.m]


Webmaster: Jutta Kretzbeihfrggw (jutta.kenretzberg@j4tawuol.dez4uc) (Stand: 07.11.2019)