diff --git a/programming/exercises/vectors.tex b/programming/exercises/vectors.tex new file mode 100644 index 0000000..2e5ca46 --- /dev/null +++ b/programming/exercises/vectors.tex @@ -0,0 +1,200 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[german]{babel} +\usepackage{natbib} +\usepackage{graphicx} +\usepackage[small]{caption} +\usepackage{sidecap} +\usepackage{pslatex} +\usepackage{amsmath} +\usepackage{amssymb} +\setlength{\marginparwidth}{2cm} +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} +\header{{\bfseries\large Exercise 2}}{{\bfseries\large Vectors}}{{\bfseries\large 18. Oktober, 2017}} +\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: + jan.grewe@uni-tuebingen.de} +\runningfooter{}{\thepage}{} + +\setlength{\baselineskip}{15pt} +\setlength{\parindent}{0.0cm} +\setlength{\parskip}{0.3cm} +\renewcommand{\baselinestretch}{1.15} + +\newcommand{\code}[1]{\texttt{#1}} +\renewcommand{\solutiontitle}{\noindent\textbf{Solutions:}\par\noindent} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} +\vspace*{-6.5ex} +\begin{center} + \textbf{\Large Introduction to Scientific Computing}\\[1ex] + {\large Jan Grewe, Jan Benda}\\[-3ex] + Neuroethology \hfill --- \hfill Institute for Neurobiology \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\ +\end{center} + +The exercises are meant for self-monitoring and revision of the lecture +topic. You should try to solve them on your own. Your solution should +be submitted as a single script (m-file) in the Ilias system. Each +task should be solved in its own ``cell''. Each cell must be +executable on its own. The file should be named according to the following pattern: +``variables\_datatypes\_\{lastname\}.m'' benannt werden +(e.g. variables\_datentypes\_mueller.m). + +\begin{questions} + \question Create vector with the following contents: + \begin{parts} + \part Integer numbers ranging from 1 to 10. + \begin{solution} + \code{a = 1:10;} + \end{solution} + \part Integer numbers in the range 0 to 20 in steps of 2. + \begin{solution} + \code{a = 0:2:20;} + \end{solution} + \part \textbf{Descending} values ranging from 100 to 0. + \begin{solution} + \code{a = 100:-1:0;} + \end{solution} + \part In 10 steps from 0 to 1. + \begin{solution} + \code{a = 0:0.1:1;} + \end{solution} + \part In 11 steps from 0 to 1. + \begin{solution} + \code{a = 0:1/11:1;} + \end{solution} + \part In 50 steps from 0 to $2\pi$ ($\pi$ is known in Matlab as the constant + \code{pi}). + \begin{solution} + \code{a = 0:2*pi/50:2*pi;} + \end{solution} + \end{parts} + + \question Calculations with vectors: + \begin{parts} + \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} + \code{x = [3 2 6 8]; + \\ disp(length(x));\\ 4\\ disp(size(x))\\ 1 4} + \end{solution} + \part What changes in \code{size} and \code{length} when you transpose the vector. + \begin{solution} + The length does not change, the size is inverted. + \end{solution} + \part Add 5 to each element of \verb+x+. + \begin{solution} + \code{disp(x + 5)} + \end{solution} + \part Multiply each element of \code{x} with 2; + \begin{solution} + \code{disp(x * 2)} + \end{solution} + \part Create a second vector (\verb+y = [4 1 3 5];+). + Make sure that \code{x} is in its original form. + \part Add both vectors \code{x + y}. + \begin{solution} + \code{y = [4 1 3 5]; \\disp(x + y)\\7 3 9 13} + \end{solution} + \part Subtract \code{y} from \code{x}. + \begin{solution} + \code{disp(x - y)\\-1 1 3 3} + \end{solution} + \part Multiply both vectors \code{x * y}. + \begin{solution} + \code{disp(x * y)\\Error using *. Inner matrix dimension must agree.} + \end{solution} + \part Explain the error message + \begin{solution} + * 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} + \part What needs to be done to make \code{mtimes} and + \code{*} working? + \begin{solution} + y needs to be transposed: \code{x * y'} + \end{solution} + \part Multiply element-wise (\code{x .* y}) and assign the result to a new variable. + \begin{solution} + \code{z = x .* y;} + \end{solution} + \end{parts} + + \question Creating vectors using helper functions: + \begin{parts} + \part Create a vector of the length 100 using the function + \code{ones} (see help). What is its purpose? + \begin{solution} + \code{ones(100,1)} creates a vector of the given size and fills it with 1. + \end{solution} + \part Create a vector of the length 100 using the function + \code{zeros} (see help). What is its purpose? + \begin{solution} + \code{zeros(100,1)} creates a vector of the given size and fills it with 0. + \end{solution} + \part Create a vector with 100 elements. All elements should have the value + 4.5. + \begin{solution} + \code{ones(100, 1) * 4.5} + \end{solution} + \part Create a 100 element vector filled with random numbers (\code{rand}, + see help). + \begin{solution} + \code{x = rand(100, 1)} + \end{solution} + \part Use the function \code{linspace} to create a 100 element vector with values between 0 and 1. + \begin{solution} + \code{x = linspace(0, 1, 100)} + \end{solution} + \end{parts} + + \question Indexing in vectors: + \begin{parts} + \part Create a 100 element length vector with values ranging from 0 to 99. + \begin{solution} + \code{x = linspace(0, 99, 100);} + \end{solution} + \part Print the first, last, fifth, 24th and the second-to-last value. + \begin{solution} + \code{disp(x(1))\\ disp(x(end))\\ disp(x(5))\\ disp(x(24))\\ disp(x(end-1))} + \end{solution} + \part Print the first 10 values. + \begin{solution} + \code{x(1:10)} + \end{solution} + \part Print the last 10 values. + \begin{solution} + \code{disp(x(end-9:end))} + \end{solution} + \part Try to print the value at the zeroth position. + \begin{solution} + \code{x(0)\\ Subscript indices must either be real positive integers or logicals.} + \end{solution} + \part Try to access the value at the 110th position. + \begin{solution} + \code{x(110)\\ Index exceeds matrix dimensions.} + \end{solution} + \part Access the values at the positions 3, 15, and 42 with a single command. + \begin{solution} + \code{disp(x([3 15 42]))} + \end{solution} + \part Access 10 randomly selected values (used \verb+randi+ to create random indices). + \begin{solution} + \code{x(randi(100,10,1))} + \end{solution} + \end{parts} + + \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}