r=translate to english, remove matrix exercises

This commit is contained in:
Jan Grewe 2017-10-18 11:24:23 +02:00
parent 5c36e0b544
commit a3d6e590c2

View File

@ -13,10 +13,11 @@
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} \usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot} \header{{\bfseries\large \"Ubung \pagestyle{headandfoot}
2}}{{\bfseries\large Vektoren und Matrizen}}{{\bfseries\large 12. Oktober, 2015}} \header{{\bfseries\large Exercise 2}}{{\bfseries\large Vectors}}{{\bfseries\large 18. Oktober, 2017}}
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: \firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} jan.grewe@uni-tuebingen.de}
\runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt} \setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm} \setlength{\parindent}{0.0cm}
@ -24,387 +25,176 @@
\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} \renewcommand{\solutiontitle}{\noindent\textbf{Solutions:}\par\noindent}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document} \begin{document}
\vspace*{-6.5ex} \vspace*{-6.5ex}
\begin{center} \begin{center}
\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] \textbf{\Large Introduction to Scientific Computing}\\[1ex]
{\large Jan Grewe, Jan Benda}\\[-3ex] {\large Jan Grewe, Jan Benda}\\[-3ex]
Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ Neuroethology \hfill --- \hfill Institute for Neurobiology \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center} \end{center}
Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und The exercises are meant for self-monitoring and revision of the lecture
Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost topic. You should try to solve them on your own. Your solution should
werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) be submitted as a single script (m-file) in the Ilias system. Each
im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen task should be solved in its own ``cell''. Each cell must be
``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig executable on its own. The file should be named according to the following pattern:
voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: ``variables\_datatypes\_\{lastname\}.m'' benannt werden
\linebreak ``vektoren\_matrizen\_\{nachname\}.m'' benannt werden (e.g. variables\_datentypes\_mueller.m).
(z.B. vektoren\_matrizen\_mueller.m).
\begin{questions} \begin{questions}
\section*{Vektoren} \question Create vector with the following contents:
\question Erzeuge Vektoren mit folgendem Inhalt:
\begin{parts}
\part Von 1 bis 10 in ganzzahligen Schritten.
\begin{solution}
\code{a = 1:10;}
\end{solution}
\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.
\begin{solution}
\code{a = 100:-1:0;}
\end{solution}
\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.
\begin{solution}
\code{a = 0:1/11:1;}
\end{solution}
\part In 50 Schritten von 0 bis $2\pi$ ($\pi$ ist als Konstante
\code{pi} in Matlab definiert).
\begin{solution}
\code{a = 0:2*pi/50:2*pi;}
\end{solution}
\end{parts}
\question Rechnen mit Vektoren:
\begin{parts}
\part Definiere einen Vektor \code{x = [3 2 6 8];}
\part Wie gro{\ss} ist der Vektor? Benutze die Funktionen
\code{size} und \code{length}. Was ist der Unterschied zwischen
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
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+.
\begin{solution}
\code{disp(x + 5)}
\end{solution}
\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];+).
Stelle sicher, dass \code{x} wieder in seiner urspr\"unglichen
Form ist.
\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}.
\begin{solution}
\code{disp(x - y)\\-1 1 3 3}
\end{solution}
\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.
\begin{solution}
* ist der Operator f\"ur die Matrixmultiplikation. Bei dieser
muessen die inneren Dimensionen \"uebereinstimmen.\linebreak
\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
\code{*} Operator funktionieren?
\begin{solution}
y m\"usste transponiert werden: \code{x * y'}
\end{solution}
\part Multipliziere die Vektoren elementweise (\code{x .* y})
und weise das Ergebnis eine neuen Variablen zu.
\begin{solution}
\code{z = x .* y;}
\end{solution}
\end{parts}
\question Erzeugen von Vektoren mit Helferfunktionen:
\begin{parts}
\part Erstelle einen 100 Elemente langen Vektor mit der Funktion
\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
\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
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},
siehe Hilfe).
\begin{solution}
\code{x = rand(100,1)}
\end{solution}
\part Erzeuge einen Vektor mit 100 Werten zwischen 0 und 1
mithilfe der Funktion \code{linspace}.
\begin{solution}
\code{x = linspace(0,1,100)}
\end{solution}
\end{parts}
\question Indizieren in Vektoren:
\begin{parts}
\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
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.
\begin{solution}
\code{x(1:10)}
\end{solution}
\part Gib die letzten 10 Werte aus.
\begin{solution}
\code{disp(x(end-9:end))}
\end{solution}
\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.
\begin{solution}
\code{x(110)\\ Index exceeds matrix dimensions.}
\end{solution}
\part Gib die Werte an den Stellen 3, 15, und 42 zusammen als
Vektor aus.
\begin{solution}
\code{disp(x([3 15 42]))}
\end{solution}
\part Gib 10 zuf\"allig ausgew\"ahlte Werte aus (benutze
\verb+randi+ um die Indizes zu erstellen).
\begin{solution}
\code{x(randi(100,10,1))}
\end{solution}
\end{parts}
\question Erzeuge eine Variable und speichere etwas Text in ihr,
so dass mindestens 2 Worte vorhanden sind. (z.B. \code{x = 'some
text'}). Benutze die Indizierung um die W\"orter einzeln
auszugeben.
\begin{solution}
\code{x = 'some text'; \\ disp(x(1:4))\\disp(x(6:end))}
\end{solution}
\newpage
\section*{Matrizen}
\question Erstelle folgende Matrix
\[ A = \left( \begin{array}{ccc} 7 & 3 & 5 \\ 1 & 8 & 3 \\ 8 & 6 &
4 \end{array} \right) \]
\begin{parts} \begin{parts}
\part Benutze die Funktion \code{size} um die Gr\"o{\ss}e vpm \code{A} anzeeigen zu lassen. \part Integer numbers ranging from 1 to 10.
\begin{solution} \begin{solution}
\code{x = [7 3 5; 1 8 3; 8 6 4];\\disp(size(x))} \code{a = 1:10;}
\end{solution} \end{solution}
\part Finde heraus, wie man \code{size} aufruft um nur die L\"ange entlang einer einzelnen Dimension auszugeben. Gib einzeln die L\"angen beider Dimensionen aus. \part Integer numbers in the range 0 to 20 in steps of 2.
\begin{solution} \begin{solution}
\code{disp(size(x, 1))}\\\code{disp(size(x, 2))} \code{a = 0:2:20;}
\end{solution} \end{solution}
\part Gib das Element in der 3. Zeile und 2. Spalte aus. \part \textbf{Descending} values ranging from 100 to 0.
\begin{solution} \begin{solution}
\code{x(3,2)} \code{a = 100:-1:0;}
\end{solution} \end{solution}
\part Gib jeweils alle Elemente der 1., 2. und 3. Zeile aus. \part In 10 steps from 0 to 1.
\begin{solution} \begin{solution}
\code{disp(x([1 2 3],:));} \code{a = 0:0.1:1;}
\end{solution} \end{solution}
\part Gib jeweils alle Elemente der 1., 2., und 3. Spalte aus. \part In 11 steps from 0 to 1.
\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.
\begin{solution}
\code{x(2,3) = x(2,3) + 1;}
\end{solution}
\part Ziehe von allen Elementen der 1. Zeile 5 ab.
\begin{solution} \begin{solution}
\code{x(1,:) = x(1,:) - 5;} \code{a = 0:1/11:1;}
\end{solution} \end{solution}
\part Multipliziere alle Elementen der 3. Spalte mit 2. \part In 50 steps from 0 to $2\pi$ ($\pi$ is known in Matlab as the constant
\code{pi}).
\begin{solution} \begin{solution}
\code{x(:,3) = x(:,3) * 2;} \code{a = 0:2*pi/50:2*pi;}
\end{solution} \end{solution}
\end{parts} \end{parts}
\question Erstelle eine $5 \times 5$ Matrix \code{M} die \question Calculations with vectors:
Zufallszahlen enth\"alt (nutze die MATLAB 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 Create a vector \code{x = [3 2 6 8];}
\part What is the size of this vector? Use the functions \code{size} and \code{length}. What is the difference between them?
\begin{solution} \begin{solution}
\code{M = randn(5, 5);} \code{x = [3 2 6 8];
\code{disp(M(2,3))} \\ disp(length(x));\\ 4\\ disp(size(x))\\ 1 4}
\end{solution} \end{solution}
\part What changes in \code{size} and \code{length} when you transpose the vector.
\part Gib jeweils alle Elemente der 1., 3. und letzten Zeile aus.
\begin{solution} \begin{solution}
\code{disp(M(1,:)) \\ disp(M(3,:))\\ disp(M(size(M,1), :))} The length does not change, the size is inverted.
\end{solution} \end{solution}
\part Add 5 to each element of \verb+x+.
\part Gib jeweils alle Elemente der 2. und 4. Spalte aus.
\begin{solution} \begin{solution}
\code{disp(M(:,2))\\ disp(M(:,4))} \code{disp(x + 5)}
\end{solution} \end{solution}
\part Multiply each element of \code{x} with 2;
\part Greife mit einem einzigen Kommando auf die Elemente jeder
zweiten Spalte zu und speichere die Daten in einer neuen Variable.
\begin{solution} \begin{solution}
\code{y = M(:, [2:2:size(M,2)])} \code{disp(x * 2)}
\end{solution} \end{solution}
\part Create a second vector (\verb+y = [4 1 3 5];+).
\part Berechne jeweils den Mittelwert der 1., 3. und 5. Zeile Make sure that \code{x} is in its original form.
(Funktion \code{mean}, siehe Hilfe). \part Add both vectors \code{x + y}.
\begin{solution} \begin{solution}
\code{mean(M([1 3 5],:), 2)} \code{y = [4 1 3 5]; \\disp(x + y)\\7 3 9 13}
\end{solution} \end{solution}
\part Subtract \code{y} from \code{x}.
\part Berechne die Summe aller Werte der 2. und 4. Spalte
(Funktion \code{sum}, siehe Hilfe).
\begin{solution} \begin{solution}
\code{sum(M(:, [2 4]), 1)} \code{disp(x - y)\\-1 1 3 3}
\end{solution} \end{solution}
\part Multiply both vectors \code{x * y}.
\part Berechne die Summe aller Elemente der Matrize.
\begin{solution} \begin{solution}
\code{sum(M(:))} \code{disp(x * y)\\Error using *. Inner matrix dimension must agree.}
\end{solution} \end{solution}
\part Explain the error message
\part Ersetze die Elemente der 2. Zeile mit denen der 4.
\begin{solution} \begin{solution}
\code{M(2,:) = M(4,:)} * operator is the matrix multiplication. The inner dimensions must agree.\linebreak
\code{disp(size(x))\\1 4 \\disp(size(y)) \\ 1 4}\\
(m,n)*(n,o) w\"are ok.
\end{solution} \end{solution}
\part What needs to be done to make \code{mtimes} and
\part F\"uhre folgendes Kommando aus: \code{M(1:2,1) = [1, 2, \code{*} working?
3]}. Was k\"onnte die Absicht dieses Codes gewesen sein? Was
bedeutet die Fehlermeldung?
\begin{solution} \begin{solution}
\code{M(1:2,1) = [1, 2,3];\\ Subscripted assignment dimension y needs to be transposed: \code{x * y'}
mismatch.} \\ Der einzuf\"ugende Vektor hat 3 Elemente, die \end{solution}
Auswahl von M in die geschrieben werden soll hat nur die \part Multiply element-wise (\code{x .* y}) and assign the result to a new variable.
Gr\"o{\ss}e 2; \begin{solution}
\code{z = x .* y;}
\end{solution} \end{solution}
\end{parts} \end{parts}
\question Matrizen k\"onnen neben der ``normalen'' \question Creating vectors using helper functions:
\textit{subscript} Indizierung auch \textit{linear} indiziert werden
(siehe Hilfe \"uber Indexing oder Funktionen \verb+sub2ind+ oder
\verb+ind2sub+).
\begin{parts} \begin{parts}
\part Erstelle eine 2-D Matrix mit Zufallszahlen mit der Dimensionalit\"at \part Create a vector of the length 100 using the function
\verb+[10,10]+. \code{ones} (see help). What is its purpose?
\begin{solution} \begin{solution}
\code{x = randn(10, 10)} \code{ones(100,1)} creates a vector of the given size and fills it with 1.
\end{solution} \end{solution}
\part Create a vector of the length 100 using the function
\part Wie viele Werte enth\"alt sie? \code{zeros} (see help). What is its purpose?
\begin{solution} \begin{solution}
\code{disp(numel(x))} \code{zeros(100,1)} creates a vector of the given size and fills it with 0.
\end{solution} \end{solution}
\part Create a vector with 100 elements. All elements should have the value
\part Benutze das lineare Indizieren um 50 zuf\"allige Werte 4.5.
auszuw\"ahlen.
\begin{solution} \begin{solution}
\code{x(randi(100, 50, 1)])} \code{ones(100, 1) * 4.5}
\end{solution} \end{solution}
\part Create a 100 element vector filled with random numbers (\code{rand},
\part Wo liegt der Vorteil gegen\"uber der \textit{subscript} see help).
Indizierung?
\begin{solution} \begin{solution}
Die Matrize ist 2-dimensional. Wenn mit dem subscript index \code{x = rand(100, 1)}
zugegriffen werden soll, dann muss auf die Dimensionen
einzeln geachtet werden. Mit dem linearen Indexieren kann einfach
einen Vektor mit n Indices benutzt werden. Wenn es auch noch eine
eindeutige (ohne doppelte) Auswahl sein soll, dann muss bei
2-D viel komplexer kontrollieren.
\end{solution} \end{solution}
\part Berechne die Summe aller Werte mit einem Funktionsaufruf.. \part Use the function \code{linspace} to create a 100 element vector with values between 0 and 1.
\begin{solution} \begin{solution}
\code{sum(x(:))} oder \code{sum(sum(x))} \code{x = linspace(0, 1, 100)}
\end{solution} \end{solution}
\end{parts} \end{parts}
\question Erstelle folgende Variablen \verb+x = [1 5 9]+ and \question Indexing in vectors:
\verb+y = [7 1 5]+ und \verb+M = [3 1 6; 5 2 7]+. Welche der
folgenden Operationen funktionieren? Wenn nicht, warum funktionieren
sie nicht? Teste Deine Vorhersagen.
\begin{parts} \begin{parts}
\part \code{x + y} \part Create a 100 element length vector with values ranging from 0 to 99.
\begin{solution} \begin{solution}
Funktioniert! \code{x = linspace(0, 99, 100);}
\end{solution} \end{solution}
\part Print the first, last, fifth, 24th and the second-to-last value.
\part \code{x * M}
\begin{solution} \begin{solution}
Matrixmultiplikation Funktioniert nicht! Inner dimensions must agree! \code{disp(x(1))\\ disp(x(end))\\ disp(x(5))\\ disp(x(24))\\ disp(x(end-1))}
\end{solution} \end{solution}
\part Print the first 10 values.
\part \code{x + y'}
\begin{solution} \begin{solution}
Funktioniert nicht! Die Dimensionalit\"aten passen nicht. \code{x(1:10)}
\end{solution} \end{solution}
\part Print the last 10 values.
\part \code{M - [x y]}
\begin{solution} \begin{solution}
Funktioniert nicht! \code{[x y] ist ein Zeilenvektor der L\"ange \code{disp(x(end-9:end))}
6, M ist eine Martix.}
\end{solution} \end{solution}
\part Try to print the value at the zeroth position.
\part \code{[x; y]}
\begin{solution} \begin{solution}
Funktioniert! Gr\"o{\ss}e: 2 3 \code{x(0)\\ Subscript indices must either be real positive integers or logicals.}
\end{solution} \end{solution}
\part Try to access the value at the 110th position.
\part \code{M - [x; y]}
\begin{solution} \begin{solution}
Funktioniert! \code{x(110)\\ Index exceeds matrix dimensions.}
\end{solution} \end{solution}
\end{parts} \part Access the values at the positions 3, 15, and 42 with a single command.
\question Erstelle eine 3-D Matrix aus drei 2-D Matrizen. Benutze
die \verb+cat()+ Funktion f\"ur diesen Zweck (schaue in der Hilfe
nach, wie sie benutzt wird).
\begin{parts}
\part Gib alle Elemente des ersten ``Blattes'' aus (Index 1 der 3. Dimension).
\begin{solution} \begin{solution}
\code{x = randn(5,5); \\y = randn(5, 5);\\ z = cat(3, x, y);\\disp(z(:,:,1))} \code{disp(x([3 15 42]))}
\end{solution} \end{solution}
\end{parts} \part Access 10 randomly selected values (used \verb+randi+ to create random indices).
\question Erzeuge eine $5 \times 5 \times 5$ Matrix die mit
ganzzahligen, gleichverteilten Zufallszahlen zwischen 0 und 100
gef\"ullt ist.
\begin{parts}
\part Berechne den Mittelwert aller Bl\"atter dieser Matrix
(benutze \verb+mean()+, siehe Hilfe).
\begin{solution} \begin{solution}
\code{x = round(rand(5,5,5) .* 100);\\ Disp(mean(mean(x(:,:,1))))\\ disp(mean(mean(x(:,:,2)))) \\ disp(mean(mean(x(:,:,3))))} \code{x(randi(100,10,1))}
\end{solution} \end{solution}
\end{parts} \end{parts}
\end{questions}
\question Store some text in a valriable. The text should consist of at least two words (e.g. \code{x = 'some
text'}). Use indexing to print out the words individually.
\begin{solution}
\code{x = 'some text'; \\ disp(x(1:4))\\disp(x(6:end))}
\end{solution}
\end{questions}
\end{document} \end{document}