From 1e0320ff8e4dbda363641a822aefafc41c46bdad Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sat, 19 Nov 2016 12:04:08 +0100 Subject: [PATCH] added solutions to function erecises --- .../lecture/pointprocessscetchA.eps | 6 +- .../lecture/pointprocessscetchA.pdf | Bin 2769 -> 2765 bytes .../lecture/pointprocessscetchB.eps | 6 +- .../lecture/pointprocessscetchB.pdf | Bin 4677 -> 4673 bytes programming/code/boltzmann.m | 8 ++ programming/code/plotboltzmann.m | 3 + programming/exercises/faculty.m | 8 ++ programming/exercises/facultyscripta.m | 6 ++ programming/exercises/facultyscriptb.m | 1 + programming/exercises/facultyscriptc.m | 3 + programming/exercises/plotsine.m | 19 +++++ programming/exercises/plotsine50.m | 9 +++ programming/exercises/plotsinea.m | 1 + programming/exercises/plotsineb.m | 1 + programming/exercises/plotsinec.m | 14 ++++ programming/exercises/plotsined.m | 4 + programming/exercises/plotsinewave.m | 13 +++ programming/exercises/printfaculty.m | 8 ++ programming/exercises/randomwalk.m | 13 +++ programming/exercises/randomwalkscript.m | 7 ++ programming/exercises/randomwalkscriptb.m | 8 ++ programming/exercises/randomwalkscriptc.m | 20 +++++ programming/exercises/randomwalkscriptd.m | 23 ++++++ programming/exercises/randomwalkthresh.m | 25 ++++++ programming/exercises/scripts_functions.tex | 76 +++++++++++++++++- programming/exercises/sinewave.m | 12 +++ scientificcomputing-script.tex | 2 +- 27 files changed, 288 insertions(+), 8 deletions(-) create mode 100644 programming/code/boltzmann.m create mode 100644 programming/code/plotboltzmann.m create mode 100644 programming/exercises/faculty.m create mode 100644 programming/exercises/facultyscripta.m create mode 100644 programming/exercises/facultyscriptb.m create mode 100644 programming/exercises/facultyscriptc.m create mode 100644 programming/exercises/plotsine.m create mode 100644 programming/exercises/plotsine50.m create mode 100644 programming/exercises/plotsinea.m create mode 100644 programming/exercises/plotsineb.m create mode 100644 programming/exercises/plotsinec.m create mode 100644 programming/exercises/plotsined.m create mode 100644 programming/exercises/plotsinewave.m create mode 100644 programming/exercises/printfaculty.m create mode 100644 programming/exercises/randomwalk.m create mode 100644 programming/exercises/randomwalkscript.m create mode 100644 programming/exercises/randomwalkscriptb.m create mode 100644 programming/exercises/randomwalkscriptc.m create mode 100644 programming/exercises/randomwalkscriptd.m create mode 100644 programming/exercises/randomwalkthresh.m create mode 100644 programming/exercises/sinewave.m diff --git a/pointprocesses/lecture/pointprocessscetchA.eps b/pointprocesses/lecture/pointprocessscetchA.eps index 6159193..1dfe6f5 100644 --- a/pointprocesses/lecture/pointprocessscetchA.eps +++ b/pointprocesses/lecture/pointprocessscetchA.eps @@ -1,7 +1,7 @@ %!PS-Adobe-2.0 EPSF-2.0 %%Title: pointprocessscetchA.tex %%Creator: gnuplot 4.6 patchlevel 4 -%%CreationDate: Fri Sep 30 10:14:40 2016 +%%CreationDate: Sat Nov 19 10:17:42 2016 %%DocumentFonts: %%BoundingBox: 50 50 373 135 %%EndComments @@ -430,10 +430,10 @@ SDict begin [ /Title (pointprocessscetchA.tex) /Subject (gnuplot plot) /Creator (gnuplot 4.6 patchlevel 4) - /Author (grewe) + /Author (jan) % /Producer (gnuplot) % /Keywords () - /CreationDate (Fri Sep 30 10:14:40 2016) + /CreationDate (Sat Nov 19 10:17:42 2016) /DOCINFO pdfmark end } ifelse diff --git a/pointprocesses/lecture/pointprocessscetchA.pdf b/pointprocesses/lecture/pointprocessscetchA.pdf index eb57b5beaf48a74f4f3535f2e74c46253aec7d3f..b532798a047d610f1170deb9983fa6771ad4f0d1 100644 GIT binary patch delta 347 zcmca8dRBBpI}@Y9<_;!XMqW!}GqV&6lT_VQGgH&a0c`Sw=yx-HZYugfkjm!II%=Q*DqhUOd-V3(n`V53M_ABG?|yR35!9yS?w`IB__+W zsbGjcX3k2?+ibz!&1eR)!!N%~!O&6xYQ2$yk%6I^CYQc%eu_(CNvej66-dC)(9qJ* zz|b7xyq_EyATuVXak?^^PF}-#BG$~=+|dY(b(9~)WFfv(#*xs k+{n&`po&;7J3Fr8lEk8tilWpsE+Z2|BQ8}{SARDy03z{OkN^Mx delta 351 zcmX>rdQo&kI}@YP<_;!XMqcxzRI?<*R14jtGy|i_0c`Su`)5x2CBcnqAKB5l&PQ_oT^)(5Mpd#rC?|UmbWsP%*)z@#h~4+_86iPljYe| zFhn1-rWd7_r*1Z5?`AXu*%F*upkQpE0CRwXk%6I^CYQc%eu_(CNvej66-dCq(%8Vz zz|aKZ!0#Lx5K|^6ak?^^PhP=!BG%H})zH=0$vV!1=SZ5OxGYdyUM{^@%3u7k(H$w|UV^dc*CpQxV nOA}WY7dsn*Dq^|p?6`_c5{pVIic-_KOpJ{TxKveL{oS|#%NJTb delta 351 zcmX@8a#Ur*Z%#&|&3`y;8F|f 0.5 + position(i) = position(i-1) + 1; + else + position(i) = position(i-1) - 1; + end +end +end diff --git a/programming/exercises/randomwalkscript.m b/programming/exercises/randomwalkscript.m new file mode 100644 index 0000000..15cff7c --- /dev/null +++ b/programming/exercises/randomwalkscript.m @@ -0,0 +1,7 @@ +n = 2000; +hold on +for k = 1:10 + [t, x] = randomwalk(n); + plot(t, x) +end +hold off diff --git a/programming/exercises/randomwalkscriptb.m b/programming/exercises/randomwalkscriptb.m new file mode 100644 index 0000000..d124e0f --- /dev/null +++ b/programming/exercises/randomwalkscriptb.m @@ -0,0 +1,8 @@ +p = 0.5; +thresh = 50.0; +hold on +for k = 1:30 + x = randomwalkthresh(p, thresh); + plot(x) +end +hold off diff --git a/programming/exercises/randomwalkscriptc.m b/programming/exercises/randomwalkscriptc.m new file mode 100644 index 0000000..7f85de4 --- /dev/null +++ b/programming/exercises/randomwalkscriptc.m @@ -0,0 +1,20 @@ +thresh = 50.0; +probs = [0.5 0.52 0.55 0.6]; +maxt = 0; +for sp = 1:4 + p = probs(sp); + subplot(2, 2, sp); + hold on + for k = 1:30 + x = randomwalkthresh(p, thresh); + if maxt < length(x) + maxt = length(x); + end + plot(x) + end + hold off + title(sprintf('p=%g', p)) + xlabel('Time') + xlim([0 maxt]) + ylabel('Position') +end diff --git a/programming/exercises/randomwalkscriptd.m b/programming/exercises/randomwalkscriptd.m new file mode 100644 index 0000000..5cb49bc --- /dev/null +++ b/programming/exercises/randomwalkscriptd.m @@ -0,0 +1,23 @@ +thresh = 50.0; +probs = 0.5:0.01:1.0; +reps = 1000; +meancount = zeros(length(probs), 1); +stdcount = zeros(length(probs), 1); +for sp = 1:length(probs) + p = probs(sp); + positions = zeros(reps, 1); + for k = 1:reps + x = randomwalkthresh(p, thresh); + positions(k) = length(x); + end + meancount(sp) = mean(positions); + stdcount(sp) = std(positions); +end +semilogy(probs, meancount, 'displayname', 'mean'); +hold on; +semilogy(probs, stdcount, 'displayname', 'std'); +hold off; +xlabel('p'); +xlim([0.5 1.0]) +ylabel('number of steps'); +legend('show'); \ No newline at end of file diff --git a/programming/exercises/randomwalkthresh.m b/programming/exercises/randomwalkthresh.m new file mode 100644 index 0000000..15af9e5 --- /dev/null +++ b/programming/exercises/randomwalkthresh.m @@ -0,0 +1,25 @@ +function positions = randomwalkthresh(p, thresh) +% computes a single random walk +% +% Arguments: +% p: the probability for an upward step +% thresh: compute the random walk until abs(pos) is larger than thresh +% +% Returns: +% positions: vector with positions of the random walker + +positions = [0.0]; +i = 2; +while true + r = rand(1); + if r < p + positions(i) = positions(i-1) + 1; + else + positions(i) = positions(i-1) - 1; + end + if abs(positions(i)) > thresh + break + end + i = i + 1; +end +end diff --git a/programming/exercises/scripts_functions.tex b/programming/exercises/scripts_functions.tex index d76be49..22975d3 100644 --- a/programming/exercises/scripts_functions.tex +++ b/programming/exercises/scripts_functions.tex @@ -1,7 +1,9 @@ -\documentclass[12pt,a4paper,pdftex]{exam} +%\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} @@ -24,6 +26,27 @@ \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}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -49,19 +72,52 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \begin{parts} \part Version 1: berechnet die Fakult\"at von 5 und gib das Resultat auf dem Bildschirm aus. + \begin{solution} + \lstinputlisting{facultyscripta.m} + \end{solution} + \part Version 2: Wie 1 aber die Funktion \"ubernimmt als Argument die Zahl, von der die Fakult\"at berechnet werden soll. + \begin{solution} + \lstinputlisting{printfaculty.m} + \lstinputlisting{facultyscriptb.m} + \end{solution} + \part Version 3: Wie 2 aber mit R\"uckgabe des berechneten Wertes. + \begin{solution} + \lstinputlisting{faculty.m} + \lstinputlisting{facultyscriptc.m} + \end{solution} + \end{parts} \question Implementiere eine Funktion, die einen Sinus mit der Amplitude 1 und der Frequenz $f = $ 50\,Hz plottet ($sin(2\pi \cdot f \cdot t)$): + \begin{solution} + \lstinputlisting{plotsine50.m} + \lstinputlisting{plotsinea.m} + \end{solution} \begin{parts} \part Erweitere die Funktion sodass die L\"ange der Zeitachse, die Schrittweite, Amplitude, Frequenz als Argumente \"ubergeben werden k\"onnen. + \begin{solution} + \lstinputlisting{plotsine.m} + \lstinputlisting{plotsineb.m} + \end{solution} + \part Gib sowohl den Sinus als auch die Zeitachse zur\"uck. + \begin{solution} + \lstinputlisting{sinewave.m} + \lstinputlisting{plotsinec.m} + \end{solution} + + \part Extra plot Funktion. + \begin{solution} + \lstinputlisting{plotsinewave.m} + \lstinputlisting{plotsined.m} + \end{solution} \end{parts} %\question Schreibe eine Funktion, die bin\"are Datens\"atze @@ -80,15 +136,33 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \begin{parts} \part \"Uberlege Dir ein geeignetes ``Programmlayout'' aus Funktionen und Skripten. + \begin{solution} + One function that computes one realisation of a random walk. + Scripts for plotting and analysis. + \end{solution} + \part Implementiere die L\"osung. + \begin{solution} + \lstinputlisting{randomwalkthresh.m} + \lstinputlisting{randomwalkscriptb.m} + \end{solution} + \part Simuliere 30 Realisationen des random walk pro Wahrscheinlichkeit. + \part Es sollen die Positionen als Funktion der Schrittanzahl geplottet werden. Erstelle einen Plot mit den je 30 Wiederholungen pro Wahrscheinlichkeitsstufe. + \begin{solution} + \lstinputlisting{randomwalkscriptc.m} + \end{solution} + \part Wie entwickelt sich die mittlere ben\"otigte Schrittanzahl in Abh\"angigkeit der Wahrscheinlichkeit? Stelle die Mittelwerte und die Standardabweichungen graphisch dar. + \begin{solution} + \lstinputlisting{randomwalkscriptd.m} + \end{solution} \end{parts} %\question Modellierung des exponentiellen Wachstums einer isolierten diff --git a/programming/exercises/sinewave.m b/programming/exercises/sinewave.m new file mode 100644 index 0000000..42f9362 --- /dev/null +++ b/programming/exercises/sinewave.m @@ -0,0 +1,12 @@ +function [time, sine] = sinewave(freq, ampl, duration, step) +% compute sine wave with time axis +% freq: frequency of the sinewave in Hertz +% ampl: amplitude of the sinewave +% duration: duration of the sinewave in seconds +% step: stepsize for plotting in seconds +% returns: +% time: vector of time points +% sine: corresponding vector with the sine wave +time = 0:step:duration; +sine = ampl*sin(2*pi*freq*time); +end diff --git a/scientificcomputing-script.tex b/scientificcomputing-script.tex index 61df5a6..b8533c8 100644 --- a/scientificcomputing-script.tex +++ b/scientificcomputing-script.tex @@ -2,7 +2,7 @@ \input{header} -\setcounter{maxexercise}{0} % show listings up to exercise maxexercise +\setcounter{maxexercise}{1000} % show listings up to exercise maxexercise %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%