\documentclass[12pt,a4paper,pdftex]{exam} %\documentclass[answers,12pt,a4paper,pdftex]{exam} \usepackage[german]{babel} \usepackage{natbib} \usepackage{xcolor} \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 \"Ubung 5}}{{\bfseries\large Scripts and functions}}{{\bfseries\large 07. November, 2017}} \firstpagefooter{Prof. Jan Benda}{Phone: 29 74 573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} \setlength{\baselineskip}{15pt} \setlength{\parindent}{0.0cm} \setlength{\parskip}{0.3cm} \renewcommand{\baselinestretch}{1.15} %%%%% listings %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{listings} \lstset{ language=Matlab, basicstyle=\ttfamily\footnotesize, numbers=left, numberstyle=\tiny, title=\lstname, showstringspaces=false, commentstyle=\itshape\color{darkgray}, breaklines=true, breakautoindent=true, columns=flexible, frame=single, xleftmargin=1em, xrightmargin=1em, aboveskip=10pt } \newcommand{\code}[1]{\texttt{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \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. In contrast to previous exercises, the solutions can not be saved in a single file but each question needs an individual file. Combine the files into a single zip archive and submit it via ILIAS. Name the archive according to the pattern: ``scripts\_functions\_\{surname\}.zip''. \begin{questions} \question Calculate the factorial of a given number $n$. \begin{parts} \part{} Version 1: Write a script that calculates the factorial of 5 and prints out the result. \begin{solution} \lstinputlisting{factorialscripta.m} \end{solution} \part{} Version 2: like version 1, but as a function that takes $n$ as input argument. \begin{solution} \lstinputlisting{printfactorial.m} \lstinputlisting{factorialscriptb.m} \end{solution} \part{} Version 3: like version 2, but the calculated result should not be printed on the command line but returned by the function. Write a script that calls the function and prints out the result. \begin{solution} \lstinputlisting{myfactorial.m} \lstinputlisting{factorialscriptc.m} \end{solution} \end{parts} \question Graphical display of a sinewave. \begin{parts} \part{} Implement a function that plots a sine with the amplitude 1 and the frequency $f=50$\,Hz $\left(\sin(2\pi \cdot f \cdot t)\right)$. Call the function in a script. \begin{solution} \lstinputlisting{plotsine50.m} \lstinputlisting{plotsinea.m} \end{solution} \part{} Improve the function that it takes the duration of the time axis, the amplitude and the frequency as input arguments. The calculation should use a temporal stepsize that is 0.01 of the frequency. \begin{solution} \lstinputlisting{plotsine.m} \lstinputlisting{plotsineb.m} \end{solution} \part{} Write a script that calls the function and controls the plotting. Change the function in a way that it returns a proper time-axis and the calculated sinwave. \begin{solution} \lstinputlisting{sinewave.m} \lstinputlisting{plotsinec.m} \end{solution} \part{} Write a second function that does the plotting. It accepts the time and the sine as arguments. Make sure, that the plot is properly labeled. Write a small script that uses both funtions to plot a sine of $5$\,Hz frequency and an amplitude of 2 for a duration of 1.5\,s. \begin{solution} \lstinputlisting{plotsinewave.m} \lstinputlisting{plotsined.m} \end{solution} \end{parts} %\question Schreibe eine Funktion, die bin\"are Datens\"atze %('signal.bin' und 'signal2.bin' vom Montag) liest und die Daten als %Vektor zur\"uckgibt. Welche Argumente muss die Funktion %\"ubernehmen? \question Random Walk. In a 1-D random walk an \emph{agent} walks randomly either in the one ($+1$) or the other ($-1$) direction. With each simulation step one direction is chosen and the position is updated accordingly. \begin{parts} \part{} Read the exercise completely before starting the implementation and then come up with a proper program layout of scripts and functions. What would be a suitable function to solve the task? Which arguments should it take? Which results should it return? \begin{solution} One function that computes one realisation of a random walk. Scripts for plotting and analysis. \lstinputlisting{randomwalkthresh.m} \end{solution} \part{} Run the simulation 10 times and plot the time-course of the positions of the \emph{agents} into the same plot. The probability of the two directions should be the same. Each \emph{agent} starts at position $0$ and the simulation should run until the position is greater than $50$ or less than $-50$. \begin{solution} \lstinputlisting{randomwalkscriptb.m} \end{solution} \part{} Now we want to know how the probability of $p_{+1}$ (the probability to walk into the $+1$ direction) impacts the random walk. Vary $p_{+1}$ in the range $0.5 \le p_{+1} < 0.8$. Do 10 random walks for four probabilities (apply the same thresholds for stopping the simulations as before). \begin{solution} \lstinputlisting{randomwalkscriptc.m} \end{solution} \part{} How does $p_{+1}$ affect the number of simulation steps? Plot the averages and standard deviations as a function of $p_{+1}$. \begin{solution} \lstinputlisting{randomwalkscriptd.m} \end{solution} \end{parts} %\question Modellierung des exponentiellen Wachstums einer isolierten %Population. Das exponentielle Wachstum einer isolierten Population %wird \"uber folgende Differentialgleichung beschrieben: %\begin{equation} % \frac{dN}{dt} = N \cdot r, %\end{equation} %mit $N$ der Populationsgr\"o{\ss}e und $r$ der Wachstumsrate. %\begin{parts} % \part L\"ose die Gleichung numerisch mit dem Euler Verfahren. % \part Implementiere eine Funktion, die die Populationsgr\"o{\ss}e % und die Zeit zur\"uckgibt. % \part Plotte die Populationsgr\"o{\ss}e als Funktion der Zeit. %\end{parts} %\question Etwas realistischer ist das logistische Wachstum einer %isolierten Population, bei der das Wachstum durch eine Kapazit\"at %gedeckelt ist. Sie wird mit folgender Differentialgleichung %beschrieben: %\begin{equation} % \frac{dN}{dt} = N \cdot r \cdot \left( 1 - \frac{N}{K} \right) %\end{equation} %mit $N$ der Population, der Wachstumsrate $r$ und $K$ der ``tragenden'' %Kapazit\"at. %\begin{parts} % \part Implementiere die L\"osung des logistischen Wachstums in % einer Funktion. Benutze das Euler Verfahren. Die Funktion soll die % Parameter $r$, $K$ sowie den Startwert von $N$ als Argumente % \"ubernehmen. % \part Die Funktion soll die Populationsgr\"o{\ss}e und die Zeit % zur\"uckgeben. % \part Simuliere das Wachstum mit einer Anzahl unterschiedlicher % Startwerte f\"ur $N$. % \part Stelle die Ergebnisse in einem Plot graphisch dar. % \part Plotte das Wachstum $dN/dt$ als Funktion der % Populationsgr\"o{\ss}e $N$. %\end{parts} \end{questions} \end{document}