Navigation



Matlabskripte und Funktionen

A) Speichern und Laden von Daten

B) Matlabskripte

C) Funktionen

H) Hausaufgaben 

A) Speichern und Laden von Daten:

T2_A1) Bevor Sie anfangen, Dateien abzuspeicher, definieren Sie sich einen Ort, wo Sie im weiteren alle Dateien des Kurses hinsortieren. Erzeugen Sie sich zunaechst in Ihrem "Eigene Dateien" Verzeichnis einen neuen Ordner "matlabkurs" (oder welcher Name Ihnen gefaellt). Wechseln Sie in Matlab in dieses Verzeichnis, indem Sie auf das icon neben der Anzeige "Current Directory" klicken.
Achten Sie in Zukunft jedesmal wenn Sie Matlab neu starten darauf, dass Sie sich im richtigen Verzeichnis befinden.

T2_A2) Erzeugen Sie eine Matrix A=[1 2 3; 4 5 6]. Speichern Sie diese mit save MatrixA ab. Schauen Sie im Fenster "Current Directory" nach, ob dort die neue Datei auftaucht. Um sich zu ueberzeugen, dass die Matrix wirklich gespeichert ist, loeschen Sie sie aus dem Workspace mit clear A. Laden Sie die Matrix wieder ein mit load MatrixA. Ueberpruefen Sie, dass die Matrix wieder im Workspace vorhanden ist.

T2_A3) Definieren Sie sich zusaetzlich eine Matrix B=[0 0 1; 1 0 0] und berechnen Sie C=A+B und D=A.*B. Speichern sie den gesamten Workspace mit save AufgabeT2_A3. Loeschen Sie alle Variabele mit clear all aus dem Workspace. Laden Sie AufgabeT2_A3 wieder ein und ueberpruefen Sie, dass alle Variablen wieder da sind.

T2_A4) Haeufig will man nicht alle Variablen speichern, die gerade zufaellig im Workspace sind, sondern nur eine Auswahl. Probieren Sie folgende Abfolge aus: save MatrixCD C D, clear all, load MatrixCD. Was ist jetzt im Workspace vorhanden? Und was, wenn Sie nocheinmal load MatrixA dazutippen?

T2_A5) Statt load FILENAME einzutippen, kann man sich auch im Fenster links das Current Directory  anzeigen lassen und die gewuenschte Datei per Doppelklick auswaehlen. Probieren Sie das mit  AufgabeT1_A3.mat aus.

T2_ A6) Achtung! Bei Einladen von Variablen werden die Werte von Variablen gleichen Namens ueberschrieben. Definieren Sie sich ausgehend vom aktuellen Workspace eine neue Variable A=1 und laden Sie dann MatrixA.mat ein. Was passiert jeweils im Workspace?

T2_ A7) Kopieren Sie sich folgende Datei in Ihr Verzeichnis und laden Sie in Matlab ein: grosse_Matrix.mat . Wie viele Zeilen und Spalten hat diese Matrix? Schauen Sie sich die Matrix mit dem Array Editor an. Greifen Sie die 4. Spalte und die 10. Zeile jeweils als Vektor heraus.

T2_A8) Sehen Sie sich MatrixA.mat in einem beliebigen Texteditor an. Was sehen Sie? Falls Sie Werte aus Matlab abspeichern und mit einem anderen Programm weiterverwenden wollen, speichern Sie das file besser mit der Option "-ascii" ab. Z.B.: clear, E=[89 76 0.1 9.7], save -ascii MatrixE.txt. Sehen Sie sich das Resultat im Texteditor und in Matlab an. Probieren Sie aus, was passiert, wenn man mehrere Variable in ein Textfile schreibt.

T2_A9) Matlab kann Excel-Dateien einlesen mit dem Befehl variable=xlsread('dateinme.xls'). Probieren Sie das mit der Datei [entfernungen.xls] aus.  Der Befehl xlswrite('dateiname',variable) soll eine Datei im xls-Format speichern (funktioniert aber auf meinem Apple nicht), probieren Sie ihn auf den Windows-Rechnern aus, indem Sie z.B. grosse_Matrix abspeichern und in Excel oeffnen. Man kann auch mit copy-paste direkt zwischen dem Array Editor in Matlab und Excel hin und her kopieren, allerdings muss man in Excel zunaechst den Bereich markieren, in den eine Matrix kopiert werden soll. Probieren Sie auch das aus.   

B) Matlabskripte:

T2_B1) Fuer aufwaendige Berechnungen waere es viel zu viel Arbeit, jedesmal alle Arbeitsschritte einzeln in das Command Window zu tippen. Dafuer gibt es die Moeglichkeit, Skripte zu schreiben - Abfolgen von Befehlen, die in immer gleicher Weise ausgefuehrt werden. Oeffnen Sie den Matlab-Editor, indem Sie auf das Symbol fuer ein neues Dokument klicken. Und tippen Sie dort ein:

clear all
A1=ones(2,5);
A2=2*ones(2,5);
Asum=A1+A2;

Speichern Sie dieses Skript als "skriptchen.m" ab (unter File->save as). Achten Sie darauf, dass sie im richtigen Verzeichnis sind. Rufen Sie im Command Window Ihr erstes Programm auf, indem Sie "skriptchen" eintippen. Was passiert im Workspace?
Loeschen Sie jetzt in jeder Zeile Ihres Skripts das Semikolon, speichern sie es ab und lassen es nochmal laufen. Was ist der Unterschied?

T2_B2) Bei unserem Skript geht alles sehr schnell. Ergaenzen Sie nach jeder Zeile des Skripts die Zeile "pause" - diese haelt das Skript bei der Ausfuehrung jeweils solange an, bis sie eine beliebige Taste druecken. Beobachten Sie Schritt fuer Schritt, was im Workspace passiert.

T2_B3) Schreiben Sie ein Skript "spaghettiskript" zur Loesung der folgenden Aufgabe:

Gesucht ist die Gesamtlaenge der Spaghetti auf Ihrem Mensateller, wenn diese in Laengsrichtung geradegezogen aneinandergereiht werden.
Sie wissen, dass die Spaghetti (ohne Sosse) 250g schwer sind, in gekochtem Zustand einen Durchmesser von 2mm und ein spezifisches Gewicht von 1.05g/cm^3 haben.
(Falls es Ihnen zu bloed ist, sich mit Spaghetti zu beschaeftigen, stellen Sie sich vor, es handele sich um die Gesamtlaenge der DNA in einem Zellkern, diese kann man im Prinzip entsprechend berechnen.) 

Ueberlegen Sie sich den Rechenweg.
Setzen Sie diesen schrittweise in Zeilen Ihres Skripts um, verwenden Sie dabei aussagekraeftige Variablennamen und achten Sie darauf, dass die Einheiten passen!
Testen Sie Ihr Skript, indem Sie es laufen lassen.
[Eine Beispielloesung: spaghettiskript.m]
[Extrakurz: spaghettiskript_spaghetticode.m]
[Ein Beispiel aus dem Kurs: Spaghetti.m]
 


T2_ B4) Es ist sehr wichtig, beim Programmieren Kommentare in das Programm zu schreiben, damit man auch nach ein paar Jahren noch weiss, was man sich dabei gedacht hat. Ergaenzen Sie hinter jeder Programmzeile abgetrennt durch "%" als Kommentar, was gerade passiert, z.B.

clear all  % alle Variablen aus dem Workspace loeschen

T2_B5) Ausser der Kommentare zu den einzelnen Zeilen sollte jedes Programm einen Kommentar-Kopf haben. Schreiben Sie einen Hilfetext fuer spaghettiskript.m, indem Sie eine erste Zeile (mit % beginnend) ergaenzen, die den Namen des Skripts  nennt und seinen Inhalt erlaeutert, z.B.

% skriptchen.m ist ein Beispielskript, in dem zwei festgelegte Matrizen addiert werden.

T2_B6) Diese erste Zeile (bzw alle ersten Zeilen, die mit % beginnen) dienen als Hilfetext zum jeweiligen Skript: Tippen Sie in das Command Window "help spaghettiskript".

T2_B7) Ein Skript greift direkt auf die Variablen im Workspace zu und kann diese veraendern. Probieren sie das aus, indem sie zunaechst mit "clear all" alle Variablen loeschen und dann einem Variablennamen, den Sie in Ihrem Skript verwenden, um Command Window die Matrix [1 1; 2 2] zuweisen. Lassen Sie dann das Spaghettiskript laufen. Was passiert im Workspace?

C) Funktionen

T2_C1) Manchmal moechte man nicht, dass ein Skript die Variablen des Workspace veraendert, weil man diese weiterverwenden moechte. Dann nutzt man statt dessen eine Funktion.
Kopieren Sie den Inhalt von spaghettiskript.m mit dem Editor in eine neue Datei und ergaenzen Sie "function spaghettifunktion" als erste Zeile, noch vor dem Hilfetext. Speichern Sie die Datei als spaghettifunktion.m ab (praktischerweise wird der Matlab-Editor Ihnen das sowieso als Standardoption anbieten.
Lassen sie "spaghettifunktion" laufen. Was passiert?
Loeschen Sie alle Variablen des Workspace und lassen die Funktion wieder laufen. Was passiert?
Definieren Sie wie in A7) eine Ihrer Variable als [1 1; 2 2] und lassen "spaghettifunktion" laufen. Was passiert? Welchen Wert hat die Variable jetzt?
(Achtung: Wir werden die Funktion jetzt schrittweise veraendern. Falls Sie alle Versionen aufheben wollen, muessen Sie jeweils einen neuen Funktionsnamen zum Speichern und Aufrufen verwenden, z.B. spaghettiskriptB1. Denken Sie dran, bei diesem und den naechsten Schritten jeweils den Hilfetext zu aktualisieren!)  

T2_C2) Haeufig moechte man, dass eine Funktion ein Ergebnis liefert, das man auch weiter verwenden kann. Dies wird durch ein Ausgabeargument erreicht. Ergaenzen Sie dazu in der ersten Zeile: "function laenge=spaghettifunktion"
Loeschen Sie alle Variablen des Workspace und rufen Sie "spaghettifunktion" auf. Was passiert?
Vielleicht moechten Sie das Ergebnis Ihrer Funktion weiterverwenden. Weisen Sie dazu seinen Ausgabewert einer neuen Variablen zu, indem Sie z.B. "spaghettilaenge=spaghettifunktion" aufrufen.

T2_C3) Bekanntlich schwankt die Spaghetti-Menge auf Mensatellern erheblich, je nach Personalitaet und Laune des Mensapersonals. Wir tragen dem Rechnung, indem wir die  Funktionalitaet unserer Funktion aendern und die erste Zeile um ein Eingabeargument ergaenzen:
"function laenge=spaghettifunktion(gewicht)"
und die Variable "gewicht" fuer Ihre Berechnung benutzen. (Wahlweise koennen Sie auch gerne, wenn Sie in Ihrer Funktion bereits eine andere Bezeichnung fuer das Gewicht gewaehlt haben, diesen Variablennamen in die Klammer der ersten Zeile schreiben.)
Rufen sie zum Test die Funktion auf mit "laenge=spaghettifunktion(250)". Entspricht das Ergebnis Ihrer Erwartung? Berechnen Sie die Laengen fuer ein paar andere Gewichte.
Was passiert, wenn man Funktioenchen jetzt ohne Ein- oder ohne Ausgabeargument aufruft?
Versuchen Sie Ihre Spaghettifunktion auszutricksen, indem Sie ihr "unpassende" Eingabewerte geben, z.B. eine Matrix. Was funktioniert? Wann gibt es Fehlermeldungen?

T2_C4) Zu unserem Leidwesen schwankt nicht nur die Menge der Spaghetti auf dem Teller, sondern auch ihre Konsistenz. Wenn sie mal wieder voellig verkocht sind, haben sie ein spezifisches Gewicht, das nicht wesentlich von Wasser abweicht, also z.B. bei 1.01g/cm^3 liegt.
Um das einzubeziehen, brauchen wir mehrere Eingabeargumente. Ergaenzen Sie das spezifische Gewicht als weiteres Eingabeargument und benutzen es in der Berechung. Die Liste der Eingabeargumente steht (sowohl im Programmtext als auch beim Aufruf) durch Kommas getrennt in der Klammer hinter dem Funktionsnamen.
Testen Sie Ihre neue Funktion.

T2_C5) Um die Variabilitaet der Spaghettiqualitaet zu demonstrieren, setzen Sie sich in den Kopf, eine Spaghettischlange von der Mensa Wechloy bis zur Hauptmensa (1.3km) zu legen.  Ergaenzen Sie deshalb als weiteres Ausgabeargument die Anzahl der Spaghettiportionen, die sie fuer diese Strecke brauche. Die Ausgabeargumente stehen in eckigen Klammern vor dem Gleichheitszeichen und dem Funktionsnamen.
Testen Sie Ihre neue Funktion.
Da man in der Mensa keine Bruchteile von Spaghettiportionen kaufen kann, runden Sie bitte die Angabe der Portionen auf die naechstgroessere ganze Zahl. Schauen Sie dazu in der Hilfe nach, welche Funktion Sie verwenden koennen.

[Beispielloesung: spaghettifunktion.m]

D) Hausaufgaben

T2_D1) Sie kennen bereits den Operator ^, mit dem man "x hoch n" berechnet. Schreiben Sie eine Funktion xhochntel die als Eingabeparameter einen Vektor x und einen Vektor n bekommt und als Ausgabe einen Vektor mit den elementeweise berechneten Kehrwerten von "x hoch n" zurueckliefert.
[xhochntel.m]

T2_D2) Gestern wurde gefragt, ob Matlab auch eine Funktion mult habe, die beim Aufruf a=mult(a,b) das Multiplikationsergebnis liefert. Diese gibt es nicht, ist aber sehr einfach zu schreiben. Schreiben Sie die Funktion so, dass sie Matrizen punktweise multipliziert.

T2_D3) Sie haben gestern auch schon einige Funktionen kennengelernt, z.B. sin, rem und size. Wieviele Ein- und Ausgabeargumente haben diese Funktionen jeweils? Schauen Sie in der Hilfe nach.

T2_D4) Schreiben Sie eine Funktion, die aus einer beliebigen Matrix die vier "Ecken" (oben links, oben rechts, unten links, unten rechts) als Vektor zurueckgibt. 
[ecken.m]

T2_D5) Schreiben Sie eine Funktion, die die Elemente auf der Diagonalen einer quadratischen Matrix als Vektor zurueckgibt.
[diagonale.m]

T2_D5) Laden Sie sich folgende Funktion herunter, speichern sie in Ihrem Verzeichnis ab und schauen Sie mit dem Matlab-Editor an: kompliziert.m
Wieviele Ein- und Ausgabeargumente hat diese Funktion?
Versuchen Sie im Editor die Abfolge der Programmschritte nachzuvollziehen, was tut die Funktion? Testen Sie Ihre Hypothese durch geeignete Eingabeparameter. Wenn Sie die Semikolon loeschen, koennen Sie die einzelnen Schritte im Command Window verfolgen.
Was passiert, wenn man die Funktion nicht wie im Hilfetext angegeben mit zwei gleich grossen Matrizen aufgerufen wird?
[kompliziert_kommentiert.m] 

T2_D6) Die Werte eines Vektor v lassen sich mit plot(v) grafisch darstellen. Schreiben Sie eine Funktion, die eine Matrix und einen skalaren Wert n als Eingabe bekommt und die n-te Zeile dieser Matrix grafisch darstellt. Testen Sie die Funktion mit einigen verschieden grossen Matrizen (am besten auch mit sehr grossen).
[Eine grosse Beispielmatrix: ueberraschung.mat]

Was steckt in der Ueberraschungsmatrix? 
[plot_zeile_n.m]

Webmastuzvvter: Jutrdtahdm Kretzgbfabeyirg (juvvtta.kretzbsgeseerg@uol.de8mx4u) (Stand: 07.11.2019)