add solutions for vectors and matrices

This commit is contained in:
Jan Grewe 2015-10-21 13:56:36 +02:00
parent 8bd0e7d775
commit 198cc173cc

View File

@ -1,4 +1,4 @@
\documentclass[12pt,a4paper,pdftex]{exam} \documentclass[12pt,a4paper,pdftex, answers]{exam}
\usepackage[german]{babel} \usepackage[german]{babel}
\usepackage{natbib} \usepackage{natbib}
@ -24,6 +24,7 @@
\renewcommand{\baselinestretch}{1.15} \renewcommand{\baselinestretch}{1.15}
\newcommand{\code}[1]{\texttt{#1}} \newcommand{\code}[1]{\texttt{#1}}
\renewcommand{\solutiontitle}{\noindent\textbf{L\"osung:}\par\noindent}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document} \begin{document}
@ -51,12 +52,30 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\question Erzeuge Vektoren mit folgendem Inhalt: \question Erzeuge Vektoren mit folgendem Inhalt:
\begin{parts} \begin{parts}
\part Von 1 bis 10 in ganzzahligen Schritten. \part Von 1 bis 10 in ganzzahligen Schritten.
\begin{solution}
\code{a = 1:10;}
\end{solution}
\part Von 0 bis 20 in 2er Schritten. \part Von 0 bis 20 in 2er Schritten.
\begin{solution}
\code{a = 0:2:20;}
\end{solution}
\part Mit \textbf{absteigendem} Inhalt von 100 bis 0. \part Mit \textbf{absteigendem} Inhalt von 100 bis 0.
\begin{solution}
\code{a = 100:-1:0;}
\end{solution}
\part In 10 Schritten von 0 bis 1. \part In 10 Schritten von 0 bis 1.
\begin{solution}
\code{a = 0:0.1:1;}
\end{solution}
\part In 11 Schritten von 0 bis 1. \part In 11 Schritten von 0 bis 1.
\begin{solution}
\code{a = 0:1/11:1;}
\end{solution}
\part In 50 Schritten von 0 bis $2\pi$ ($\pi$ ist als Konstante \part In 50 Schritten von 0 bis $2\pi$ ($\pi$ ist als Konstante
\code{pi} in Matlab definiert). \code{pi} in Matlab definiert).
\begin{solution}
\code{a = 0:2*pi/50:2*pi;}
\end{solution}
\end{parts} \end{parts}
\question Rechnen mit Vektoren: \question Rechnen mit Vektoren:
@ -65,56 +84,132 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\part Wie gro{\ss} ist der Vektor? Benutze die Funktionen \part Wie gro{\ss} ist der Vektor? Benutze die Funktionen
\code{size} und \code{length}. Was ist der Unterschied zwischen \code{size} und \code{length}. Was ist der Unterschied zwischen
den beiden Funktionen? den beiden Funktionen?
\begin{solution}
\code{x = [3 2 6 8]; \\ disp(length(x));\\ 4\\ disp(size(x))\\ 1 4}
\end{solution}
\part Wie \"andern sich \code{size} und \code{length} des \part Wie \"andern sich \code{size} und \code{length} des
Vektors wenn er transponiert wird? Vektors wenn er transponiert wird?
\begin{solution}
L\"ange \"andert sich nicht. R\"uckgabewert von size ist invertiert.
\end{solution}
\part Addiere 5 zu jedem Element von \verb+x+. \part Addiere 5 zu jedem Element von \verb+x+.
\begin{solution}
\code{disp(x + 5)}
\end{solution}
\part Multipliziere jedes Element von \code{x} mit 2; \part Multipliziere jedes Element von \code{x} mit 2;
\begin{solution}
\code{disp(x * 2)}
\end{solution}
\part Definiere einen zweiten Vektor (\verb+y = [4 1 3 5];+). \part Definiere einen zweiten Vektor (\verb+y = [4 1 3 5];+).
Stelle sicher, dass \code{x} wieder in seiner urspr\"unglichen Stelle sicher, dass \code{x} wieder in seiner urspr\"unglichen
Form ist. Form ist.
\part Addiere beide Vektoren \code{x + y}. \part Addiere beide Vektoren \code{x + y}.
\begin{solution}
\code{y = [4 1 3 5]; \\disp(x + y)\\7 3 9 13}
\end{solution}
\part Subtrahiere beide Vektoren \code{x - y}. \part Subtrahiere beide Vektoren \code{x - y}.
\begin{solution}
\code{disp(x - y)\\-1 1 3 3}
\end{solution}
\part Multipliziere beide Vektoren \code{x * y}. \part Multipliziere beide Vektoren \code{x * y}.
\begin{solution}
\code{disp(x * y)\\Error using *. Inner matrix dimension must agree.}
\end{solution}
\part Erkl\"are die Fehlermeldung. \part Erkl\"are die Fehlermeldung.
\begin{solution}
* ist der Operator f\"ur die Matrixmultiplikation. Bei dieser
muessen die inneren Dimensionen \"uebereinstimmen.
\code{disp(size(x))\\1 4 \\disp(size(y)) \\ 1 4}\\
(m,n)*(n,o) w\"are ok.
\end{solution}
\part Was m\"usste man machen, damit \code{mtimes} bzw. der \part Was m\"usste man machen, damit \code{mtimes} bzw. der
\code{*} Operator funktionieren? \code{*} Operator funktionieren?
\begin{solution}
y m\"usste transponiert werden: \code{x * y'}
\end{solution}
\part Multipliziere die Vektoren elementweise (\code{x .* y}) \part Multipliziere die Vektoren elementweise (\code{x .* y})
und weise das Ergebnis eine neuen Variablen zu. und weise das Ergebnis eine neuen Variablen zu.
\begin{solution}
\code{z = x .* y;}
\end{solution}
\end{parts} \end{parts}
\question Erzeugen von Vektoren mit Helferfunktionen: \question Erzeugen von Vektoren mit Helferfunktionen:
\begin{parts} \begin{parts}
\part Erstelle einen 100 Elemente langen Vektor mit der Funktion \part Erstelle einen 100 Elemente langen Vektor mit der Funktion
\code{ones} (siehe Hilfe). Was macht sie? \code{ones} (siehe Hilfe). Was macht sie?
\begin{solution}
\code{ones(100,1)} erzeugt einen Vektor bei dem alle Elemente mit 1 gef\"ullt sind.
\end{solution}
\part Erstelle einen 100 Elemente langen Vektor mit der Funktion \part Erstelle einen 100 Elemente langen Vektor mit der Funktion
\code{zeros}. Was macht diese? \code{zeros}. Was macht diese?
\begin{solution}
\code{zeros(100,1)} erzeugt einen Vektor bei dem alle Elemente mit 0 gef\"ullt sind.
\end{solution}
\part Erstelle einen 100 Elemente langen Vektor in dem jedes \part Erstelle einen 100 Elemente langen Vektor in dem jedes
Element den Wert 4.5 hat. Element den Wert 4.5 hat.
\begin{solution}
\code{ones(100,1) * 4.5}
\end{solution}
\part Erzeuge einen Vektor mit 100 Zufallszahlen (\code{rand}, \part Erzeuge einen Vektor mit 100 Zufallszahlen (\code{rand},
siehe Hilfe). siehe Hilfe).
\begin{solution}
\code{x = rand(100,1)}
\end{solution}
\part Erzeuge einen Vektor mit 100 Werten zwischen 0 und 1 \part Erzeuge einen Vektor mit 100 Werten zwischen 0 und 1
mithilfe der Funktion \code{linspace}. mithilfe der Funktion \code{linspace}.
\begin{solution}
\code{x = linspace(0,1,100)}
\end{solution}
\end{parts} \end{parts}
\question Indizieren in Vektoren: \question Indizieren in Vektoren:
\begin{parts} \begin{parts}
\part Erzeuge einen Vektor mit 100 Elementen (0 - 100). \part Erzeuge einen Vektor mit 100 Elementen (0 - 100).
\begin{solution}
\code{x = linspace(0,100,100);}
\end{solution}
\part Gib jeweils den ersten, den letzten, den 5., 24. und den \part Gib jeweils den ersten, den letzten, den 5., 24. und den
vorletzten Wert aus. vorletzten Wert aus.
\begin{solution}
\code{disp(x(1))\\ disp(x(end))\\ disp(x(5))\\ disp(x(24))\\ disp(x(end-1))}
\end{solution}
\part Gib die ersten 10 Werte aus. \part Gib die ersten 10 Werte aus.
\begin{solution}
\code{x(1:10)}
\end{solution}
\part Gib die letzten 10 Werte aus. \part Gib die letzten 10 Werte aus.
\begin{solution}
\code{disp(x(end-10:end))}
\end{solution}
\part Versuche den Wert an der Stelle 0 auszugeben. \part Versuche den Wert an der Stelle 0 auszugeben.
\begin{solution}
\code{x(0)\\ Subscript indices must either be real positive integers or logicals.}
\end{solution}
\part Versuche den Wert an der Stelle 110 auszugeben. \part Versuche den Wert an der Stelle 110 auszugeben.
\begin{solution}
\code{x(110)\\ Index exceeds matrix dimensions.}
\end{solution}
\part Gib die Werte an den Stellen 3, 15, und 42 zusammen als \part Gib die Werte an den Stellen 3, 15, und 42 zusammen als
Vektor aus. Vektor aus.
\begin{solution}
\code{disp(x([3 15 42]))}
\end{solution}
\part Gib 10 zuf\"allig ausgew\"ahlte Werte aus (benutze \part Gib 10 zuf\"allig ausgew\"ahlte Werte aus (benutze
\verb+randi+ um die Indizes zu erstellen). \verb+randi+ um die Indizes zu erstellen).
\begin{solution}
\code{x(randi(100,10,1))}
\end{solution}
\end{parts} \end{parts}
\question Erzeuge eine Variable und speichere etwas Text in ihr, \question Erzeuge eine Variable und speichere etwas Text in ihr,
so dass mindestens 2 Worte vorhanden sind. (z.B. \code{x = 'some so dass mindestens 2 Worte vorhanden sind. (z.B. \code{x = 'some
text'}). Benutze die Indizierung um die W\"orter einzeln text'}). Benutze die Indizierung um die W\"orter einzeln
auszugeben. auszugeben.
\begin{solution}
\code{x = 'some text'; \\ disp(x(1:4))\\disp(x(6:end))}
\end{solution}
\newpage \newpage
\section*{Matrizen} \section*{Matrizen}
@ -124,11 +219,29 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
4 \end{array} \right) \] 4 \end{array} \right) \]
\begin{parts} \begin{parts}
\part Gib das Element in der 3. Zeile und 2. Spalte aus. \part Gib das Element in der 3. Zeile und 2. Spalte aus.
\begin{solution}
\code{x = [7 3 5; 1 8 3; 8 6 4];\\x(3,2)}
\end{solution}
\part Gib jeweils alle Elemente der 1., 2. und 3. Zeile aus. \part Gib jeweils alle Elemente der 1., 2. und 3. Zeile aus.
\begin{solution}
\code{x([1 2 3],:);}
\end{solution}
\part Gib jeweils alle Elemente der 1., 2., und 3. Spalte aus. \part Gib jeweils alle Elemente der 1., 2., und 3. Spalte aus.
\begin{solution}
\code{disp(x(:, 1))\\ disp(x(:, 2))\\ disp(x(:, 3))}
\end{solution}
\part Erh\"ohe das Element in der 2. Zeile und 3. Spalte um Eins. \part Erh\"ohe das Element in der 2. Zeile und 3. Spalte um Eins.
\begin{solution}
\code{x(2,3) = x(2,3) + 1;}
\end{solution}
\part Ziehe von allen Elementen der 1. Zeile 5 ab. \part Ziehe von allen Elementen der 1. Zeile 5 ab.
\begin{solution}
\code{x(1,:) = x(1,:) - 5;}
\end{solution}
\part Multipliziere alle Elementen der 3. Spalte mit 2. \part Multipliziere alle Elementen der 3. Spalte mit 2.
\begin{solution}
\code{x(:,3) = x(:,3) * 2;}
\end{solution}
\end{parts} \end{parts}
\question Erstelle eine $5 \times 5$ Matrix \code{M} die \question Erstelle eine $5 \times 5$ Matrix \code{M} die
@ -136,19 +249,57 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\verb+randn()+. Benutze die Hilfe: Was macht die Funktion?). \verb+randn()+. Benutze die Hilfe: Was macht die Funktion?).
\begin{parts} \begin{parts}
\part Gib das Element in der 2. Zeile und 3. Spalte aus. \part Gib das Element in der 2. Zeile und 3. Spalte aus.
\begin{solution}
\code{disp(M(2,3))}
\end{solution}
\part Gib jeweils alle Elemente der 1., 3. und letzten Zeile aus. \part Gib jeweils alle Elemente der 1., 3. und letzten Zeile aus.
\begin{solution}
\code{disp(M(1,:)) \\ disp(M(3,:))\\ disp(M(size(M,1), :))}
\end{solution}
\part Gib jeweils alle Elemente der 2. und 4. Spalte aus. \part Gib jeweils alle Elemente der 2. und 4. Spalte aus.
\begin{solution}
\code{disp(M(:,2))\\ disp(M(:,4))}
\end{solution}
\part Greife mit einem einzigen Kommando auf die Elemente jeder \part Greife mit einem einzigen Kommando auf die Elemente jeder
zweiten Spalte zu und speichere die Daten in einer neuen Variable. zweiten Spalte zu und speichere die Daten in einer neuen Variable.
\begin{solution}
\code{y = M(:, [2:2:size(M,2)])}
\end{solution}
\part Berechne jeweils den Mittelwert der 1., 3. und 5. Zeile \part Berechne jeweils den Mittelwert der 1., 3. und 5. Zeile
(Funktion \code{mean}, siehe Hilfe). (Funktion \code{mean}, siehe Hilfe).
\begin{solution}
\code{mean(M([1 3 5],:), 2)}
\end{solution}
\part Berechne die Summe aller Werte der 2. und 4. Spalte \part Berechne die Summe aller Werte der 2. und 4. Spalte
(Funktion \code{sum}, siehe Hilfe). (Funktion \code{sum}, siehe Hilfe).
\part Berechne die Summer aller Elemente der Matrize. \begin{solution}
\code{sum(M(:, [2 4]), 1)}
\end{solution}
\part Berechne die Summe aller Elemente der Matrize.
\begin{solution}
\code{sum(M(:))}
\end{solution}
\part Ersetze die Elemente der 2. Zeile mit denen der 4. \part Ersetze die Elemente der 2. Zeile mit denen der 4.
\begin{solution}
\code{M(2,:) = M(4,:)}
\end{solution}
\part F\"uhre folgendes Kommando aus: \code{M(1:2,1) = [1, 2, \part F\"uhre folgendes Kommando aus: \code{M(1:2,1) = [1, 2,
3]}. Was k\''onnte die Absicht dieses Codes gewesen sein? Was 3]}. Was k\''onnte die Absicht dieses Codes gewesen sein? Was
bedeutet die Fehlermeldung? bedeutet die Fehlermeldung?
\begin{solution}
\code{M(1:2,1) = [1, 2,3];\\ Subscripted assignment dimension
mismatch.} \\ Der einzuf\"ugende Vektor hat 3 Elemente, die
Auswahl von M in die geschrieben werden soll hat nur die
Gr\"o{\ss}e 2;
\end{solution}
\end{parts} \end{parts}
\question Matrizen k\"onnen neben der ``normalen'' \question Matrizen k\"onnen neben der ``normalen''
@ -158,12 +309,28 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\begin{parts} \begin{parts}
\part Erstelle eine 2-D Matrix mit Zufallszahlen mit der Dimensionalit\"at \part Erstelle eine 2-D Matrix mit Zufallszahlen mit der Dimensionalit\"at
\verb+[10,10]+. \verb+[10,10]+.
\begin{solution}
\code{x = randn(10, 10)}
\end{solution}
\part Wie viele Werte enth\"alt sie? \part Wie viele Werte enth\"alt sie?
\begin{solution}
100
\end{solution}
\part Benutze das lineare Indizieren um 50 zuf\"allige Werte \part Benutze das lineare Indizieren um 50 zuf\"allige Werte
auszuw\"ahlen. auszuw\"ahlen.
\begin{solution}
\code{x(randi(100, 50, 1)])}
\end{solution}
\part Wo liegt der Vorteil gegen\"uber der \textit{subscript} \part Wo liegt der Vorteil gegen\"uber der \textit{subscript}
Indizierung? Indizierung?
\part Berechne die Summe aller Werte mit einem Funktionsaufruf.. \part Berechne die Summe aller Werte mit einem Funktionsaufruf..
\begin{solution}
\code{sum(x(:))} oder \code{sum(sum(x))}
\end{solution}
\end{parts} \end{parts}
\question Erstelle folgende Variablen \verb+x = [1 5 9]+ and \question Erstelle folgende Variablen \verb+x = [1 5 9]+ and
@ -172,11 +339,35 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
sie nicht? Teste Deine Vorhersagen. sie nicht? Teste Deine Vorhersagen.
\begin{parts} \begin{parts}
\part \code{x + y} \part \code{x + y}
\begin{solution}
Funktioniert!
\end{solution}
\part \code{x * M} \part \code{x * M}
\begin{solution}
Matrixmultiplikation Funktioniert nicht! Inner dimensions must agree!
\end{solution}
\part \code{x + y'} \part \code{x + y'}
\begin{solution}
Funktioniert nicht! Die Dimensionalit\"aten passen nicht.
\end{solution}
\part \code{M - [x y]} \part \code{M - [x y]}
\begin{solution}
Funktioniert nicht! \code{[x y] ist ein Zeilenvektor der L\"ange
6, M ist eine Martix.}
\end{solution}
\part \code{[x; y]} \part \code{[x; y]}
\begin{solution}
Funktioniert! Gr\"o{\ss}e: 2 3
\end{solution}
\part \code{M - [x; y]} \part \code{M - [x; y]}
\begin{solution}
Funktioniert!
\end{solution}
\end{parts} \end{parts}
\question Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze \question Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze
@ -184,6 +375,9 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
nach, wie sie benutzt wird). nach, wie sie benutzt wird).
\begin{parts} \begin{parts}
\part Gib alle Elemente des ersten ``Blattes'' aus (Index 1 der 3. Dimension). \part Gib alle Elemente des ersten ``Blattes'' aus (Index 1 der 3. Dimension).
\begin{solution}
\code{x = randn(5,5); \\y = randn(5, 5);\\ z = cat(3, x, y);\\disp(z(:,:,1))}
\end{solution}
\end{parts} \end{parts}
\question Erzeuge eine $5 \times 5 \times 5$ Matrix die mit \question Erzeuge eine $5 \times 5 \times 5$ Matrix die mit
@ -192,6 +386,10 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
\begin{parts} \begin{parts}
\part Berechne den Mittelwert aller Bl\"atter dieser Matrix \part Berechne den Mittelwert aller Bl\"atter dieser Matrix
(benutze \verb+mean()+, siehe Hilfe). (benutze \verb+mean()+, siehe Hilfe).
\begin{solution}
\code{x = rand(5,5,5) .* 100;\\ disp(mean(mean(x(:,:,1))))\\ disp(mean(mean(x(:,:,2)))) \\ disp(mean(mean(x(:,:,3))))}
\end{solution}
\end{parts} \end{parts}
\end{questions} \end{questions}