Anzufertigen ist eine MATLAB-Funktion arrtest, die die Lösungen für alle Unterbeispiele enthalten soll. Diese werden beim Aufruf durch die Übergabe einer Stringvariablen sw ausgewählt.
Der Zugriff auf Teile von Arrays wird wir im Abschnitt 3.6 erläutert, wobei man im Abschnitt 3.6.2 ausführliche Beispiele findet.
Basiswissen über dieses Kapitel des Skriptums ist unbedingte Voraussetzung für die Übung. Probieren Sie daher u.a. die Befehle zeros, ones, eye, diag aus, und versuchen Sie mit der Doppelpunkt Notation auf Teile der Matrizen zuzugreifen.
Der Aufruf der Funktion sollte mit r = arrtest(sw,m,n,o) erfolgen, wobei sw als Schalter für die einzelnen Subaufgaben dient, m, n und o erfüllen je nach Unterbeispiel unterschiedliche Aufgaben und haben auch jeweils andere Defaultwerte.
Um das Setzen der Defaultwerte in den Unterbeispielen zu erleichtern, sollen
am Beginn des Programms nicht übergebene Parameter (nargin) auf den
Wert []
(leeres Array) gesetzt werden. Dann kann man innerhalb der
switch-Kosntruktion mit Hilfe des Befehls isempty
die
eigentlichen Defaultwerte setzen.
'const'
verwendet werden.
'chess'
soll eine schachbrettartige
Anordnung von Einsern und Nullen als Symbole für schwarz und weiß
erzeugt werden. Die Defaultgröße der
-Matrix sollte
sein und sie sollte links oben mit einer Eins beginnen.
Denken Sie dabei an die Verwendung der Befehle eye
und
repmat. Praktisch ist auch der Befehl ceil
und
das Löschen von ganzen Zeilen oder Spalten mit Hilfe der Zuweisung eines
leeren Arrays []
, bzw. der Zugriff auf einen Teil der Matrix
mit Hilfe der Doppelpunkt
Notation.
'diag'
mit
Hilfe der Befehls diag
folgende Matrix mit m=8 Zeilen
und n=7 Spalten (Defaultwerte)
'diagplus'
eine
-Matrix
mit einem Defaultwert m = 5.
'randsym'
eine
-Matrix (Default 5) mit Zufallszahlen im
Intervall
, die zusätzlich symmetrisch ist. Als
symmetrische Matrix bezeichnet man eine Matrix für die
.
Verwenden Sie dazu die Befehle rand, triu
und
transpose.
Die Lösung dieses Problems ist ein wenig schwieriger und erfolgt in zwei Stufen. Die erste Stufe erzeugt mit rand und triu eine Matrix, bei der nur der Teil über und inklusive der Hauptdiagonale besetzt ist. In einer zweiten Stufe wird dann die zweite Form des Befehls triu(A,k) verwendet, das Ergebnis transponiert und zum ersten Teil addiert.
Wie immer gibt es natürlich auch hier andere Lösungen.
'magic'
mit dem Befehl magic
ein
magisches Quadrat M, wobei ist. Beweisen Sie durch Anwendung
der Befehle sum, diag
und
fliplr, dass alle Summen über die Reihen, die Spalten und
die beiden Diagonalen gleich groß sind.
Verwenden Sie dazu die verschiedenen Formen von sum(M,k) und die Befehle diag und fliplr.
Verbinden Sie die vier Summenvektoren zu einem Zeilenvektor und bedenken Sie dabei, dass die Ausrichtung der resultierenden Vektoren von sum(M,1) und sum(M,2) unterschiedlich ist.
Das Zusammenhängen von Arrays erfolgt mit dem Befehl cat bzw. mit seiner Kurzform [A,B] oder [A;B].
Geben Sie den Vektor mit allen -Summenwerten als Resultat r zurück. Das magische Quadrat wird von der Funktion nicht zurückgegeben.
'numberst'
folgende
-Matrix (Default
)
'star'
folgende Matrix der
Größe
, wobei als Defaultwert m=3 zu verwenden ist,
'rstar'
folgende Matrix der
Größe
, wobei als Defaultwert m=3 zu verwenden ist,
'setnan'
folgende Matrix der
Größe
(Defaultwert
),
Beginnen Sie mit einer Matrix mit lauter Einsen und setzen Sie dann mit Hilfe der Doppelpunkt-Notation in zwei Befehlszeilen einmal die Eckpunkte und dann den Mittelbereich auf nan. Dabei ist immer das Keyword end zu verwenden. Der Wert nan symbolisiert in MATLAB ''Not a Number''. Mit nan kann man immer weiterrechnen, wobei die Rechenregel ganz einfach ist. Jede Operation mit nan gibt wieder nan.
Hier noch Anregungen für Studenten mit etwas fortgeschrittenem Interesse:
'test'
erstellen, wo
die Funktion arrtest sich immmer wieder für alle Fälle aufruft.
Dafür erzeugt man eine Zelle
testcases = {'const','chess','diag', .... };
arrtest(testcases{k},m,n,o)
'in'
erstellen, der
den Benutzer nach den Werten für sw, m, n und o fragt
(input) und dann damit wiederum arrtest
aufruft.
In solchen Fällen kann auch eine Ausgabe am Schirm aus einer Funktion, bzw. die zuätzliche Eingabe von Werten mit input interessant sein. Viel Spaß beim Ausprobieren.
Winfried Kernbichler 2005-04-26