Navigation

Matlabskripte und Funktionen

Stand: 6.9.2011

pdf-Version des Skripts: tag2.pdf

Word-Version des Skripts: tag2.doc

Beispielloesungen:

Downloads:

T2A7) [grosse_Matrix.mat]

T2H2) [kompliziert.m]

T2H3) [ueberraschung.mat]

HTML-Version:

A) Speichern und Laden von Daten

B) Matlabskripte

C) Funktionen

D) Hausaufgaben 

A) Speichern und Laden von Daten:

Im Normalfall bedient man Matlab nicht durch eintippen aller Daten, die man verarbeiten moechte, sondern benutzt Dateien, aus denen Daten eingelesen und in die Daten abgespeichert werden. Beim Abspeichern einer Datei mit dem Befehl save Dateiname legt Matlab standardmaessig seinen Workspace (also alle aktuellen Variablen) auf dem Datentraeger ab. Die dabei automatisch erzeugte Endung des Dateinamens ist .mat . Wenn man nur einen Teil der aktuellen Variablen abspeichern moechte, muss man dies gezielt mit angeben (s. T2_A4).

Beim Einlesen einer .mat Datei mit dem Befehl load Dateiname (es ist egal, ob man nur Dateiname oder Dateiname.mat angibt) erzeugt Matlab die darin abgespeicherten Variablen in seinem Workspace. Achtung: Die eingelesenen Variablen haben die gleichen Namen, die sie vor dem Abspeichern hatten (und nicht etwa den Dateinamen). Wenn Variablen des gleichen Namens im Workspace vorhanden sind, werden diese ueberschrieben!

Achtung: Matlab benutzt zum Speichern und Laden jeweils das oben in der Leiste Current Directory angegebene aktuelle Verzeichnis.  Das Verzeichnis kann man wechseln, indem man sich im Current Folder Fenster durch Klicken an die richtige Stelle im Verzeichnisbaum bewegt. Eine haeufig schnellere Moeglichkeit ist es, den Pfad ueber die Kommandozeile anzugeben. Der Befehl fuer einen Wechsel des Verzeichnisses lautet cd. Z.B. bedeutet cd Tag1 "wechsele in den Unterordner Tag1". Um ein Verzeichnis nach oben zu wechseln, benutzt man die Bezeichnung .. so kann man mit dem Befehl cd ../Tag2 z.B. von einem Unterordner Tag1 direkt in einen anderen Unterordner Tag2 wechseln. Die direkte Angabe des Verzeichnisses ist insbesondere dann praktisch, wenn man eine Datei in einem anderen als dem gerade aktuellen laden oder speichern moechte. Z.B. bedeutet save Tag1/testdatei dass der aktuelle Workspace im Unterverzeichnis Tag1 unter dem Namen testdatei.mat abgespeichert wird.

Es koennen auch Dateien eingelesen werden, die nicht von Matlab erzeugt wurden (z.B. Text-, Bild-, Excell-Dateien etc). Dafuer werden haeufig spezielle Befehle benoetigt, auf die wir am 5. Kurstag eingehen werden.

Aufgaben:

T2_A1) Bevor Sie anfangen, Dateien abzuspeichern, 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 Folder" klicken.
Achten Sie in Zukunft jedes Mal, 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 Folder" 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 noch einmal load MatrixA dazutippen?

T2_A5) Statt load FILENAME einzutippen, kann man sich auch im Fenster links das Current Folder  anzeigen lassen und die gewuenschte Datei per Doppelklick auswaehlen. Probieren Sie das mit  AufgabeT2_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) Erzeugen Sie sich in ihrem persoenlichen Matlab-Verzeichnis ein Unterverzeichnis. Probieren Sie zwei Wege aus, eine Datei in dieses Unterverzeichnis zu schreiben: zunaechst wechseln Sie in das Verzeichnis und speichern dort ab. Dann wechseln Sie wieder in das urspruengliche Verzeichnis eine Ebene hoeher und speichern mit save unterordner/dateiname2 (benutzen Sie dabei einen anderen Dateinamen als beim ersten Speichern, sonst wird die Datei ueberschrieben). Versuchen Sie beide Files sowohl vom Hauptverzeichnis als auch vom Unterverzeichnis aus einzuladen.

B) Matlabskripte:

Fuer aufwaendige Berechnungen waere es viel zu viel Arbeit, jedes Mal 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. Bei einem Skript handelt es sich um die implementierte Version eines Algorithmus.

Wenn man das Skript unter einem bestimmten Dateinamen mit der Endung .m abgespeichert hat (der Matlab-Editor ergaenzt diese Endung automatisch), hat man damit einen neuen Matlab-Befehl erzeugt. Ruft man diesen Befehl auf, indem man ihn in das Command Window eintippt, werden nacheinander alle Zeilen der Datei abgearbeitet. Erst wenn die gesamte Abarbeitung erfolgt ist, kann der naechste Befehl in das Command Window eingegeben werden.

Natuerlich kann der neue Befehl auch innerhalb eines anderen Skripts (oder einer Funktion) verwendet werden. Tatsaechlich sind sich gegenseitig aufrufende Programmteile sogar eine ausgesprochen uebliche und nuetzliche Art, ein grosses Programm zu strukturieren. Innerhalb eines Programms koennen sogenannte "cells" - Programmteile - dazu dienen, den Ablauf weiter zu strukturieren. Diese lassen sich leicht im Programm wiederfinden und eventuell an anderer Stelle noch einmal verwenden.

Falls Sie das noch nicht getan haben, ist jetzt der richtige Zeitpunkt sich die Texte Wichtige Konzepte in Matlab und Wichtige Schritte beim Programmieren anzusehen, deren Inhalt hier nicht noch einmal wiederholt werden soll.

Damit Sie selber und auch andere Leute Ihre geschriebenen Matlabprogramme auch nach einiger Zeit noch nachvollziehen koennen, sollten Sie sich als "guten Stil" angewoehnen:

  • der Datei einen aussagekraeftigen Namen zu geben
  • aussagekraeftige Variablennamen zu verwenden
  • grosszuegig zu kommentieren (am besten jede Zeile, die nicht total offensichtlich ist)
  • das Programm mit einem Hilfetext zu versehen.

Der Matlab-Editor ist mehr als ein Fenster zum Eintippen und Speichern von Befehlen. Er beinhaltet eine Reihe von Werkzeugen, die einem das Programmieren und insbesondere das Finden von Fehlern in Programmen ("Debugging") erleichtern.

Eine Bitte: Bitte speichern Sie Ihre Aufgabe, die Sie uns zum Nachsehen geben wollen, mit folgender Benennung ab: Aufgabennummer_IhrName, also z.B. T7_H1_Sonja (Sie muessen Ihr Programm dann auch von der Kommandozeile als T7_H1_Sonja aufrufen!) Das ist zwar didaktisch nicht gut, denn es handelt sich um alles andere als aussagekraeftige Dateinamen, erspart mir aber bei der Durchsicht der abgegebenen Programme eine Menge Arbeit!

Aufgaben: 

T2_B1)  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 noch einmal laufen. Was ist der Unterschied?

T2_ B2) 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_B3) Ausser der Kommentare zu den einzelnen Zeilen sollte jedes Programm einen Kommentar-Kopf haben. Schreiben Sie einen Hilfetext fuer skriptchen.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_B4) Diese erste Zeile (bzw alle ersten Zeilen, die mit % beginnen) dienen als Hilfetext zum jeweiligen Skript: Tippen Sie in das Command Window "help skriptchen".

T2_B5) 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. Probieren Sie das aus und lassen Sie sich "unterwegs" ein paar Zeilen auf dem Bildschirm ausgeben. Dies koennen Sie mit dem Befehl disp('hier steht Text').

Der Befehl pause kann auch benutzt werden, um sich die Programmausfuehrung sozusagen in automatischer Zeitlupe anzusehen. Wenn man ihm eine Zahl uebergibt (z.B. mit pause(2)), wird die weitere Programmausfuehrung fuer eine entsprechende Anzahl Sekunden unterbrochen.

T2_B6)  Statt jeweils "pause" einzutippen, kann man auch den Matlab-Editor fuer sich arbeiten lassen. Der Editor bietet die Moeglichkeit, den sogenannten "cell mode" zu verwenden. Das bedeutet, dass man Programme aus Unterbloecken (cells) aufbaut. Einen solchen Block definiert man im Matlab-Editor durch eine Kommentarzeile, die mit %% anfaengt. Diese sollte beschreiben, was im naechsten Unterabschnitt des Programms passiert. Der cell mode ist besonders hilfreich fuer grosse Programme, da sich anhand der Bloecke leicht die grobe Struktur des Gesamtprogramms nachvollziehen laesst und sich Bloecke gut finden und in andere Programme uebernehmen lassen. Wenn man "cells" benutzt, kann man diese auch einzeln laufen lassen. Dazu klickt man in den Programmcode oder die Kommentarzeile eines "cells", dieses wird dann farbig markiert. Ganz oben links gibt es ein Symbol (zwei Kaestchen, bei denen auf das obere ein Pfeil zeigt), das nur den betreffenden Programmteil ausfuehren laesst. Probieren Sie dies aus, indem Sie Ihr Skript in zwei Teile unterteilen, die jeweils mit einer %%-Kommentarzeile anfangen.

T2_B7) Der Matlab-Editor kann auch zum "Debugging" benutzt werden, also um Fehler zu finden. Selbst wenn keine Fehler im Programm sind, bietet das Debugging die Moeglichkeit, Matlab waehrend der Arbeit "zuzusehen" und die Entwicklung von Variablenwerten Schritt fuer Schritt nachzuvollziehen. Probieren Sie diese Moeglichkeiten aus:

  • Wenn man oben in der Leiste des Editors auf das Symbol mit dem gruenen Pfeil klickt, laeuft das Skript los.
  • Wenn nicht das ganze Programm durchlaufen soll, sondern man den Zustand des Workspace zwischendurch untersuchen will, kann man dafuer sogenannte "breakpoints" setzen, bei denen der Programmablauf unterbrochen wird. Das geht, indem man vor der Zeile, deren Effekt man sehen will, auf den kleinen Strich klickt. Dieser wird dann zum roten Punkt. Durch nochmaliges Klicken verschwindet er wieder.
  • Probieren Sie aus, was passiert, wenn Sie einen Breakpoint setzen und das Skript laufen lassen. Testen Sie, was Sie waehrend dieser Unterbrechung im Matlab Command Window tun koennen und was nicht. Was passiert, wenn man in diesem Zustand auf die verschiedenen Pfeilsymbole oben im Editor klickt? Wie kommt man insbesondere wieder aus dem Debugging-Modus heraus?
  • Benutzen Sie statt des Befehls "pause" den Matlab-Editor, um sich die Bearbeitung jedes einzelnen Schritts des Programms anzusehen. Finden Sie heraus, wie das geht.

T2_B8) 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.
Falls das Skript nicht das erwartete Ergebnis liefert, koennen Sie die Debugging-Funktionen des Editors verwenden, um den Fehler zu finden.

T2_B9) Ein Skript greift direkt auf die Variablen im Workspace zu und kann diese veraendern. Es verhaelt sich also so, als ob man jeden Befehl einzeln im Command Window eingibt. Probieren sie aus:

clear all % loescht alle Variablen im Workspace
A1=[1 1; 2 2]     % definiert eine neue Variable
skriptchen          % ruft das oben definierte Skript auf

Schauen Sie nach, welche Variablen jetzt im Workspace vorhanden sind. Welchen Wert hat die Variable A1?

C) Funktionen

Haeufig moechte man nicht, dass ein Skript beliebige Variablen des Workspace veraendern kann, weil man diese weiterverwenden moechte. Deshalb gibt es Funktionen: Eine Funktion ist ein Programm, das waehrend seiner Abarbeitung einen eigenen Workspace erzeugt, der vom Haupt-Workspace des Kommandofensters getrennt ist und nach Abarbeitung aller Programmzeilen wieder geschlossen wird. Fuer die Kommunikation zwischen dem Workspace des Kommandofensters und dem Workspace der Funktion dienen Argumente: Eingabeargumente uebergeben Variablen aus dem Workspace an die Funktion, so dass sie dort verwendet werden koennen. Ausgabeargumente uebermitteln Ergebnisse der Funktion an den Workspace. Alle anderen innerhalb der Funktion verwendeten Variablen werden geloescht, sobald die Funktion beendet ist.

Um eine Funktion zu erzeugen, muss in der ersten Zeile der Datei ("Kopf") das Schluesselwort function stehen. Die Syntax fuer die Erzeugung einer Funktion ist die gleiche wie fuer den Aufruf einer Funktion, bis auf dieses Schluesselwort:

Erzeugung: function [Ausgabe1,Ausgabe2] = Funktionsname (Eingabe1, Eingabe2)

Aufruf: [Ausgabe1,Ausgabe2] = Funktionsname (Eingabe1, Eingabe2)

Hierbei sind  Ausgabe1, Ausgabe2, Eingabe1 und Eingabe2 Variablennamen. Die Variablen koennen im Workspace der Funktion und im Workspace des Kommandofensters unterschiedlich heissen, aber die Werte der sich entsprechenden Parameter sind gleich. Z.B. koennte der Aufruf lauten:

[a,b]=Funktionsname(27,M)

Dann hat die Variable Eingabe1 in der Funktion den Wert 27 und die Variable Eingabe2 in der Funktion den gleichen Wert wie die Variable M im Kommandofenster. Die Funktion berechnet Werte fuer die Ausgabeargumente Ausgabe1 und Ausgabe2 und uebergibt diese an die Variablen a und b, die nach Ende der Funktion im Workspace des Kommandofensters enthalten sind.

Guter Stil:

  • Verwenden Sie immer den gleichen Namen fuer die Datei, den sie auch im Kopf der Funktion verwenden.
  • Fangen Sie "unsinnige" Eingabeparameter durch Abfragen ab. (Wie das geht, besprechen wir morgen.)
  • Ueberlegen Sie sich BEVOR Sie ein Programm schreiben, ob eine Funktion oder ein Skript die bessere Wahl ist und ob Sie bestimmte Teile des Programms in eine Unterfunktion oder ein Unterskript auslagern wollen.

Aufgaben: 

T2_C1) Beispiele fuer vordefinierte Funktionen mit Ein- und Ausgabeargumenten haben wir gestern schon gesehen, z.B. y=sin(x) oder r=rem(a,b).

Es gibt auch Funktionen, die eine variable Anzahl von  Ein- und Ausgabeargumenten haben koennen: Bereits gestern haben wir die Funktion size kennengelernt, die die Groeße einer Matrix zurueckgibt. size braucht mindestens eine Matrix als Eingabe (size(M)), zusaetzlich kann die Dimension angegeben werden (size(M,d)). Abhaengig von der Eingabe wird entweder die Anzahl der Zeilen und der Spalten der Matrix zurueckgegeben ([zeilen,spalten]=size(M)) oder nur die Groesse einer Dimension (z=size(M,1)).

  • Probieren Sie aus, was size fuer die verschiedenen Arten des Aufrufs zurueckliefert, wenn man es auf einen Skalar, einen Vektor und eine 3x3 Matrix anwendet.
  • Fuer Vektoren gibt es den Befehle laenge=length(a). Was liefert length(M) fuer eine Matrix M

T2_C2) Jetzt zu selbst geschriebenen Funktionen:

  • 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? Vergleichen Sie das Verhalten der Funktion mit dem des Skripts. Ist es bei der Funktion auch so, als ob man die einzelnen Befehle im Command Window eingibt?
  • Definieren Sie wie in T2_B9) im Workspace des Kommandofensters eine Variable als [1 1; 2 2], die den gleichen Namen hat wie eine Variable in Ihrer spaghettifunktion. Dann lassen Sie "spaghettifunktion" laufen. Was passiert? Welchen Wert hat die Variable im Workspace des Kommandofensters, wenn die Funktion durchgelaufen ist?
  • Setzen Sie einen Breakpoint in der ersten Zeile ihrer Funktion und starten Sie die Funktion im Debugging Modus. Schauen Sie sich an, wie sich der Workspace der Funktion von Schritt zu Schritt bei Abarbeitung des Programms veraendert.

(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. spaghettiskriptC2. Denken Sie daran, bei diesem und den naechsten Schritten jeweils den Hilfetext zu aktualisieren!)  

T2_C3) 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_C4) Bekanntlich schwankt die Spaghetti-Menge auf Mensatellern erheblich, je nach Persoenlichkeit 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 die spaghettifunktion 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_C5) 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 Komma getrennt in der Klammer hinter dem Funktionsnamen.
Testen Sie Ihre neue Funktion.

T2_C6) Um die Variabilitaet der Spaghettiqualitaet zu demonstrieren, setzen Sie sich in den Kopf, eine Spaghettischlange von der Mensa Wechloy bis zur Hauptmensa (0.9km) 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 naechste groessere ganze Zahl. Schauen Sie dazu in der Hilfe nach, welche Funktion Sie verwenden koennen.

T2_C7) Probieren Sie aus, wie sich der Debugging-Modus des Editors verhaelt, wenn man ihn auf eine Funktion mit Ein- und Ausgabeparametern anwendet. Welche Unterschiede gibt es zur Benutzung bei einem Skript? Was muss man beachten?

D) Hausaufgaben

T2_H1) Schreiben Sie eine Funktion, die aus einer beliebigen Matrix die vier "Ecken" (oben links, oben rechts, unten links, unten rechts) als Vektor zurueckgibt.  

T2_H2) 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. Alternativ verwenden Sie die Debugging-Funktion des Editors. Kommentieren Sie die Funktion.
*) Was passiert, wenn man die Funktion nicht wie im Hilfetext angegeben mit zwei gleich grossen Matrizen aufgerufen wird? Warum?

T2_H3) Die Werte eines Vektor v lassen sich wie gestern gelernt 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? 

* T2_H4) 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. 

* T2_H5) Sie haben gestern auch schon einige Funktionen kennengelernt, z.B. sin und rem. Wie viele Ein- und Ausgabeargumente haben diese Funktionen jeweils? Schauen Sie in der Hilfe nach.

* T2_H6) Schreiben Sie eine Funktion, die die Elemente auf der Diagonalen einer quadratischen Matrix als Vektor zurueckgibt.

* T2_H7) Wie bereits erwaehnt, koennen Funktionen auch andere Funktionen aufrufen. Schreiben Sie eine Funktion, die die erste, die mittlere und die letzte Spalte einer Matrix jeweils in einem neuen Graphikfenster darstellt, und dazu die Funktion aus T2_H3 benutzt. Ein neues Graphikfenster oeffnet man mit dem Befehl figure. 

Zum 3. Kurstag




Webffmaster:y6ky Jutta Kretzbe4pnwarg (jutticka.qv8c6kretzberg@uol.de) (Stand: 07.11.2019)