Tag 09

Tag 9 im Jahr 2015: Thema Handles und Sammlung noch offener Aufgaben

Bitte laden Sie für das Thema handles das heutige Skript als pdf oder als Word-Datei herunter!

Da während des Kurses oft die Zeit nicht reicht, um sich mit den interessanteren und anspruchsvolleren Aufgaben zu beschäftigen, kann das am letzten regulären Kurstag nachgeholt werden. Teilweise erlöffnen auch die inzwischen dazugelernten Programmierkonzepte andere Lösungen als am eigentlichen Kurstag. Es kann also auch für Leute, die eine Aufgabe schon einmal bearbeitet haben, sinnvoll sein, sie noch einmal anzusehen.

Hier eine Sammlung der bei vielen KursteilnehmerInnen noch offenen Aufgaben:

Bitte bearbeiten Sie mindestens T7H2. Suchen Sie sich von den anderen Aufgaben diejenigen aus, die Sie am meisten interessieren.

T7H2) [CellRespMat.mat] enthält Antworten von 20 Nervenzellen in der Retina, deren Aktivität in einem Experiment aufgezeichnet und in dieser 3D-Matrix abgespeichert wurde. Die erste Dimension der 3D-Matrix entspricht den 20 Zellen, die zweite der Zeit (500 Zeitschritte mit je 1 ms) und die dritte Dimension der Stimuluspräsentation (192 Präsentationen des gleichen Reizes). Z.B: r=CellRespMat(5,100,45) ist der 100ste Zeitschritt der Antwort von Zelle 5 bei der 45sten Reizpräsentation. Für jeden Zeitschritt antwortent jede Zelle mit 0 (kein spike) oder 1 (spike). Die Zellen antworten auf 192 Lichtreize (Muster auf dem Bildschirm), die sich mit gleicher Wahrscheinlichkeit nach links oder rechts bewegten. Die Richtung des jeweiligen Bewegungsreizes ist in einem Vektor abgespeichert: [sigma.mat] (-1 heißt links, 1 rechts).

  • Schauen Sie sich die Daten im Array Editor oder als Grafik an. Dafür müssen Sie die Daten auf 2D-Matrizen reduzieren. Der Befehl squeeze macht aus einer "Scheibe" einer 3D-Matrix eine echte 2D-Matrix, z.B. M=squeeze(CellRespMat(5,:,:)); enthält alle Zeitpunkte aller Präsentationen der Zelle 5.
  • Überlegen Sie sich eine geeignete Art, durch Nutzung von cell Arrays oder Strukturen die Messdaten gemeinsam mit der zugehörigen Stimulation zu speichern, um den Umgang mit den Daten zu erleichtern.
  • Hinweise:
    • Die Art, wie man Daten organisiert, ist immer auch Geschmacksache - es gibt hier nicht nur eine richtige oder beste Lösung.)
    • sparse() funktioniert nur für 2D-Matrizen!

T5H3) Bei [spikedaten_kurz.mat] handelt es sich um intrazelluläre Messungen des Membranpotentials eines Blutegelneurons. Es wurden 10 Antworten dieser Zelle auf einen jeweils gleichen Reiz aufgezeichnet, einen Strompuls, dessen Zeitverlauf (in nA) im gleichzeitig gespeicherten Vektor stimulus abgelegt ist.

  • Schreiben Sie ein Skript, um sich alle Antwortspuren gemeinsam mit dem Zeitverlauf der Reizung anzusehen (das darf auch nacheinander sein).
  • Legen Sie "per Augenmaß" eine Schwelle fest, mit der sich die Aktionspotentiale finden lassen.
  • Achtung: jeweils am Ende des Strompulses gibt es in der Antwortspur ein Artefakt. Dieses wollen wir möglichst nicht als Aktionspotential erkennen.

**T5H4) Schreiben Sie eine Funktion, die als Eingabeargumente die Matrix mit den Messdaten der letzten Aufgabe (T5H3) und einen Schwellwert bekommt und als Ausgabe einen Vektor liefert, wie viele Spikes in den einzelnen Durchläufen jeweils ausgelöst wurden. (Die Schwierigkeit an dieser Aufgabe ist, dass Blutegel-spikes eine zeitliche Länge von mehreren Millisekunden besitzen aber jeweils nur einmal gezählt werden sollen).

 

T7H3) (entspricht ungefähr T4H5, kann von der eigenen Lösung dafür modifiziert werden)

Einen Kreis (der eigentlich ein 360-Eck ist), macht man mit Matlab so:
degrad = pi/180;
w=0:1:360;
si=sin(w*degrad);
co=cos(w*degrad);
plot(co,si)

Wenn man das ausprobiert, sieht dieser Kreis ziemlich nach einem Ei aus. axis equal macht die Achsen quadratisch, so dass es schöner anzuschauen ist.
Einen geschlossenen Linienzug wie diesen Kreis kann man mit dem Befehl fill(x,y,farbdef) mit einer Farbe ausfüllen. Farben definiert man dabei entweder mit dem auch beim plot-Befehl verwendeten Kürzel (z.B. y für yellow etc) oder mit Hilfe der RGB-Kodierung.

  • Erzeugen Sie eine Struktur, in der für die verschiedenen Kreise (oder sonstigen n-Ecke) alle relevanten Informationen enthalten sind.
  • Zeichnen Sie in gleicher Weise ein Quadrat, ein 3-Eck, ein 7-Eck und ein 25-Eck.
  • Probieren Sie aus, wie man die Größe und die Richtung dieser Figuren ändert.
  • *) Man muss das Programm nur geringfügig verändern, um einen in einem Zug gezeichneten fünfzackigen Stern zu zeichnen. Wie?

**T7H4) Sternenhimmel (entspricht ungefähr T4H6): Sie wollen eine hübschen bunt gefüllten Sternenhimmel mit verschieden großen, bunt gefüllten Sternen (oder wahlweise sonstigen N-Ecken) mit verschieden vielen Ecken vor dunkelblauem Hintergrund darstellen.

  • a) Überlegen Sie sich eine Struktur, in der Sie alle relevanten Informationen zu ihren Sternen ablegen können.
  • b) Zeichnen Sie den Sternenhimmel mit mehreren Sternen unterschiedlicher Farbe.
  • c) Verschönern Sie Ihren Sternenhimmel dadurch, dass er den ganzen Bildschirm füllt. (Nutzen Sie die Hilfe, um rauszubekommen, wie das geht.)
  • d) Zeichnen Sie Ihre Sterne an zufällige Orte auf den Himmel.
  • e) Man kann den Sternenhimmel als eine Art Bildschirmschoner verwenden.
    • Zunächst sind die Sterne wie oben beschrieben bunt.
    • Anschließend werden die Sterne nach jeweils einer kleinen Pause in zufälliger Reihenfolge gelb.
    • Wenn alle Sterne gelb sind, bekommen sie in zufälliger Reihenfolge wieder ihre ursprüngliche Farbe.
    • Diese Farbänderung wird solange wiederholt, bis der Benutzer das Programm abbricht.
    • f) Speichern Sie die Reihenfolge Ihrer Himmelserscheinungen mit Hilfe einer sinnvollen Struktur in einer Datei ab. Schreiben Sie ein Programm, das die Himmelsshow in gleicher Weise wiederholt.
    • ***g) Stellen Sie sicher, dass die verschiedenen Sterne sich nicht überlagern.

 

T8H2) In den Neurowissenschaften ist es eine verbreitete Herangehensweise, die Zeitpunkte des Auftretens einzelner Aktionspotentiale als unwichtig anzusehen und nur die Spikerate (also Anzahl aufgetretener Aktionspotentiale in einem gegebenen Zeitfenster) zu betrachten. Wenn dann das Auftreten einzelner Spikes simuliert werden soll, wird dies mit einem Zufallsprozess getan, dem sogenannten Poissonprozess. Ein Poissonprozess hat die Eigenschaft, dass zu jedem Zeitschritt unabhängig von allen anderen Zeitschritten entschieden wird, ob ein Ereignis stattfindet oder nicht. Wenn z.B. ein Neuron mit 10 Spikes/s feuert und eine Sampelrate von 1000Hz benutzt wird, ist die Wahrscheinlichkeit für das Auftreten eines Spikes in jedem Zeitschritt 1%.

a) Schreiben Sie eine Funktion, die als Eingabewerte eine Spikerate, die Samplerate und die Länge der gewünschten simulierten Antwortspur bekommt und einen Vektor mit der simulierten Antworten des Neurons zurückgibt.

b) Erweitern Sie Ihre Funktion so, dass sie nicht einen festen Wert für die Spikerate als Eingabe bekommt, sondern einen Vektor, der die Spikerate für jeden Zeitpunkt der zu simulierenden Antwort angibt (die Länge braucht man dann nicht mehr zu übergeben, sie ergibt sich aus der Länge des Vektors der Spikeraten).

T8H3) Der Poissonprozess ist das einfachste denkbare Neuronenmodell und kann viele Eigenschaften biologischer Nervenzellen nicht erklären. Ein etwas realistischeres (aber immer noch sehr einfaches) Modell für Aktionspotentialantworten eines Neurons ist das integrate-and-fire Neuronenmodell. Es handelt sich um ein Differentialgleichungsmodell, das die zeitliche Änderung der Membranspannung beschreibt, in Kombination mit einer Schwelle, die über die Zeitpunkte des Auslösens von Aktionspotentiallen entscheidet.

Das Demoprogramm [intfire.m] zeigt, wie ein integrate-and-fire Neuronenmodell auf einen externen Eingangsstrom reagiert.

a) Wie reagiert das Modellneuron auf andere injizierte Stromverläufe?

  • Probieren Sie aus, den Puls stärker oder schwächer zu machen.
  • Machen Sie den Puls länger oder kürzer.
  • Was ist der kürzeste Puls, bei dem ein spike ausgelöst wird?
  • Wie reagiert das Modell auf einen Sinusförmigen Reiz?


b) Was bewirken die Parameter?:

  • Welche Auswirkungen hat die Zeitkonstante?
  • Welche Auswirkungen hat die Feuerschwelle?
  • Was passiert, wenn man von einem anderen Membranpotentialwert startet?

c) Wie wirkt sich Rauschen auf die Antworten aus?

  • Erweitern Sie das Modell, indem Sie bei der Integration in jedem Zeitschritt tau_bin*randn hinzuaddieren. Dieser Schritt soll simulieren, dass Nervenzellen auf gleiche Reizung nicht jedes mal genau gleich antworten.
  • Lassen Sie die Simulation mehrfach laufen. Wie verändern sich die Ergebnisse?
  • Führen Sie einen neuen Parameter ein, der die Größe des Rauschens skaliert und probieren Sie seinen Effekt aus.
  • Modifizieren Sie das erweiterte integrate-und-fire Skript zu einer Funktion, die die Anzahl erzeugter Spikes zurückgibt aber keine graphische Ausgabe hat.
  • Schreiben Sie ein skript, das die neue integrate-and-fire Funktion 100 mal aufruft und ein Histogramm der vorkommenden Spikeanzahlen plottet.

 

**T8H4)Schreiben Sie ein Programm, das für eine gegebene Menge an Messwerten eine Sigmoidfunktion bestimmt, die den mittleren quadratischen Abstand zu den Messwerten minimiert.

Testen Sie diese Funktion, indem Sie künstliche Daten herstellen, bei denen eine Sigmoidfunktion mit Rauschen überlagert wird.

 

T6H3) In einem psychophysikalischen Experiment sollen einem Versuchstier drei verschiedene Töne in zufälliger Reihenfolge vorgespielt werden, aber jeder Ton soll genau 5 Mal vorkommen. Wir kümmern uns erstmal nicht um die Generierung der Töne, sondern nennen sie einfach Bedingung 1, 2 und 3. 
Überlegen Sie sich einen Algorithmus, der die Reizbedingungen in die richtige Reihenfolge bringt und setzen Sie diesen in ein Programm um.
Testen Sie das Programm, indem Sie es mehrfach laufen lassen.  Macht es immer, was es soll? Sind die Ergebnisse jedes Mal gleich?
Erweitern Sie Ihr Programm so, dass es N (eine beliebige Anzahl) Reize, die M mal (also beliebig oft) vorgespielt werden sollen, in eine Reihenfolge bringt. 
Tipp: Benutzen Sie für diese Aufgabe die Funktion repmat. Diese erzeugt eine große Matrix durch mehrfache Wiederholung einer kleineren. Z.B. B = repmat(A,2,5) erzeugt eine Matrix B, in der insgesamt 10 Kopien der Matrix A enthalten sind, wobei A zweimal untereinander und fünfmal nebeneinander angeordnet wird. (B hat also die doppelte Zeilen- und fünffache Spaltenzahl von A.) 

 

T6H4) Die Messwerte einer Apparatur ist selbst ohne biologisches Präparat nicht perfekt rauschfrei. Um das Geräterauschen abzuschätzen, wurden im Elektrophysiologie-Praktikum für die Apparatur mit einer Modellzelle (einem elektronischen Schaltkreis, der die Membraneigenschaften einer Nervenzelle nachbaut) 100 Messungen mit dem gleichen Reiz [stimulus1khz.mat] durchgeführt und die Antworten als Matrix unter[antworten1khz.mat] abgespeichert.

  • Schauen Sie sich eine beliebige einzelne Messung zusammen mit dem Reiz an (entsprechend Aufgabe T5C3).
  • Berechnen und plotten Sie in ein neues Grafikfenster den Zeitverlauf der über die 100 Messungen gemittelten Antwort.
  • Berechnen und plotten Sie in ein neues Grafikfenster den Mittelwert und die Standardabweichung der jeweils letzten 300ms für jede Messung (Mittelung über die Zeit). Gibt es eine Tendenz? Gibt es Ausreißer?
  • Berechnen und geben Sie als Textausgabe im Kommandofenster aus: Sind Mittelwert und / oder Standardabweichung vor, während und nach der Reizung unterschiedlich?

 

 

T6H5) (Für mathematisch Interessierte) Häufig sehen Messdaten zunächst recht kompliziert verteilt aus. Bei genauerer Untersuchung stellt sich dann manchmal heraus, dass sie aus zwei überlappenden Verteilungen stammen. Beispielsweise überlappen sich die Verteilungen der Körpergrößen von Männern und Frauen (denn es gibt Frauen, die größer sind als viele Männer).

Stellen Sie sich vor, Sie bekommen die Aufgabe, aus der Körpergröße auf das Geschlecht zurückzuschließen und kennen die Verteilungen der Körpergrößen. Für solche Aufgaben wird oft das Prinzip "Maximum Likelihood" verwendet: Tippe auf die Verteilung mit der höheren Wahrscheinlichkeit für den gegebenen Wert. Mit dieser Idee lässt sich ein Schwellwert bestimmen, unterhalb dessen man auf die Verteilung mit dem kleineren Mittelwert tippen sollte. Dieser Schwellwert ist der Schnittwert der Verteilungen.

  • Erzeugen Sie sich zwei Zufallszahlen, die verschiedenen Normalverteilungen entstammen, die eine mit Mittelwert 5 und Standardabweichung 2, die andere mit Mittelwert 3 und Standardabweichung 1.
  • Berechnen Sie mit der gestern eingeführten Formel der Wahrscheinlichkeitsdichte für jede der beiden Zufallszahlen die Wahrscheinlichkeiten, dass sie der einen oder der anderen Verteilung entstammten.
  • Erweitern Sie dieses Programm für zwei Vektoren aus Zufallszahlen aus den oben genannten Verteilungen.
  • Berechnen Sie den Anteil der Zufallszahlen, die nach dem Maximum Likelihood Prinzip der falschen Verteilung zugeordnet würden.
  • Schauen Sie sich die beiden Verteilungen grafisch an. Wo sollte man die Grenze ziehen?
  • Variieren Sie Mittelwerte und Standardabweichungen der beiden Verteilungen. Wann gibt es mehr und wann weniger Fehler?

**T6H6) (Für mathematisch Interessierte) Erweitern Sie die letzte Aufgabe zu einer Funktion, die für die Angabe von zwei Mittelwerten und zwei Standardabweichungen ausgibt, bei welchem Wert man die Grenze ziehen sollte, um die Verteilungen optimal zu trennen.

 

** T4H7) (Wird in der nächsten Aufgabe weiterverwendet) Sie haben die Aufgabe, jeweils 10 männliche und 10 weibliche Kohlmeisen, Amseln und Rotkehlchen zu fangen, zu beringen und ihr Gewicht zu bestimmen.

  • Schreiben Sie eine Funktion, das diese Arbeit für Sie erledigt und eine Tabelle zurückgibt, die für die 60 Tiere jeweils die Nummer des Ringes (aufsteigend von 1 bis 60 nach Fangreihenfolge), die Vogelart, das Geschlecht und das Gewicht enthält. Nutzen Sie dabei jeweils einen Zahlencode (z.B. Kohlmeise=1, Amsel=2, Rotkehlchen=3), der im Kommentar des Programms genau dokumentiert ist.
  • Die Vögel "fangen" Sie mit folgender Funktion[vogelfang.m], die mit[Art,Weibchen,Gewicht]=vogelfang aufgerufen wird und Ihnen zufällige Vögel ins Netz flattern lässt. (Diese Funktion müssen Sie jetzt noch nicht verstehen sondern nur benutzen, wir besprechen sie am nächsten Kurstag).
  • Rückgabewerte:
    • Art ist eine Zeichenkette,
    • Weibchen ist ein Wahrheitswert zur Angabe des Geschlechts,
    • Gewicht ist eine Zahl (in Gramm)
  • Wenn Sie einen Vogel fangen, den Sie für Ihre Statistik nicht brauchen, lassen Sie ihn frei, ohne seine Daten aufzunehmen.

*T5H5) Benutzen Sie Ihre eigene Lösung zur Aufgabe T4H7 (oder wahlweise die Musterlösung vogeltabelle_insa.m), um eine Matrix gefangener Vögel zu erstellen. Sortieren Sie diese so, dass, zuerst die Amseln, dann die Rotkehlchen und zuletzt die Meisen in der Matrix stehen, wobei innerhalb dieser Gruppen jeweils zuerst die Männchen und dann die Weibchen aufgelistet werden. Die Tiere einer Art und eines Geschlechts sollen jeweils nach dem Gewicht sortiert sein.

(Stand: 21.08.2020)