From a481398d60a9995cfaad8ff24d5034733b58a6bf Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sun, 6 Nov 2016 12:19:53 +0100 Subject: [PATCH 01/16] [exercise] update control flow exercise --- programming/exercises/control_flow.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/programming/exercises/control_flow.tex b/programming/exercises/control_flow.tex index f17a192..bfb1cd4 100644 --- a/programming/exercises/control_flow.tex +++ b/programming/exercises/control_flow.tex @@ -14,7 +14,7 @@ %%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} \pagestyle{headandfoot} -\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Kontrollstrukturen}}{{\bfseries\large 13. Oktober, 2015}} +\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Kontrollstrukturen}}{{\bfseries\large 08. November, 2016}} \firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -42,8 +42,8 @@ werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: -``variablen\_datentypen\_\{nachname\}.m'' benannt werden -(z.B. variablen\_datentypen\_mueller.m). +``control\_flow\_\{nachname\}.m'' benannt werden +(z.B. control\_flow\_mueller.m). \begin{questions} \question Implementiere \code{for} Schleifen bei denen die Laufvariable: From 10a007f84ecd1f77dfe51e51cfd538e82238f25a Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sun, 6 Nov 2016 12:20:09 +0100 Subject: [PATCH 02/16] [exercise] update boolean expressions --- programming/exercises/boolean_logical_indexing.tex | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/programming/exercises/boolean_logical_indexing.tex b/programming/exercises/boolean_logical_indexing.tex index 42276b2..9f0d3e5 100644 --- a/programming/exercises/boolean_logical_indexing.tex +++ b/programming/exercises/boolean_logical_indexing.tex @@ -15,7 +15,7 @@ \usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} \pagestyle{headandfoot} \header{{\bfseries\large \"Ubung 3}}{{\bfseries\large Boolesche Ausdr\"ucke, logisches - Indizieren}}{{\bfseries\large 13. Oktober, 2015}} + Indizieren}}{{\bfseries\large 31. Oktober, 2016}} \firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -41,8 +41,8 @@ Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig -voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: -``variablen\_datentypen\_\{nachname\}.m'' benannt werden +voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:\newline +``boolesche\_ausdruecke\_\{nachname\}.m'' benannt werden (z.B. variablen\_datentypen\_mueller.m). \section{Boolesche Ausdr\"ucke} @@ -77,14 +77,14 @@ voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: \newpage \section{Logische Indizierung} -Bollesche Ausdr\"ucke k\"onnen benutzt werden um aus Vektoren und +Boolesche Ausdr\"ucke k\"onnen benutzt werden um aus Vektoren und Matrizen die Elemente herauszusuchen, die einem bestimmeten Kriterium entsprechen. \begin{questions} \question Gegeben sind \verb+x = (1:10)+ und \verb+y = [3 1 5 6 8 2 9 4 7 0]+. Versuche die Ausgaben folgender - Anweisungen zu verstehen. + Anweisungen zu verstehen. Erkl\"are die Ergebnisse. \begin{parts} \part \verb+x < 5+ \part \verb+x( x < 5) )+ @@ -99,10 +99,10 @@ entsprechen. 0 und 100 (\verb+randi+). Ersetze die Werte der Elemente, die in folgende Klassen fallen: \verb+x < 33+ mit 0, \verb+x >= 33 und x < 66+ mit 1 und alle \verb+x >= 66+ auf 2. - \part Ermittle die Anzahl Elemente fuer jede Klasse mithilfe eines + \part Ermittle die Anzahl Elemente f\"ur jede Klasse mithilfe eines Booleschen Ausdrucks (\verb+sum+ kann eingesetzt werden um die Anzahl Treffer zu ermitteln). \end{parts} \end{questions} -\end{document} \ No newline at end of file +\end{document} From 8b3028de65548b839565c67c4f6b1ddad5ea79f0 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Sun, 6 Nov 2016 12:21:24 +0100 Subject: [PATCH 03/16] [exercises] update vectors-matrices --- programming/exercises/vectors_matrices.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/programming/exercises/vectors_matrices.tex b/programming/exercises/vectors_matrices.tex index 83eb0ba..16af545 100644 --- a/programming/exercises/vectors_matrices.tex +++ b/programming/exercises/vectors_matrices.tex @@ -1,4 +1,4 @@ -\documentclass[12pt,a4paper,pdftex, answers]{exam} +\documentclass[12pt,a4paper,pdftex]{exam} \usepackage[german]{babel} \usepackage{natbib} From bd62a155935e76c499beba7a1815da7bf4bae1eb Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Tue, 15 Nov 2016 08:33:44 +0100 Subject: [PATCH 04/16] take away a few exercises --- programming/exercises/scripts_functions.tex | 88 ++++++++++----------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/programming/exercises/scripts_functions.tex b/programming/exercises/scripts_functions.tex index 1baf4c5..d76be49 100644 --- a/programming/exercises/scripts_functions.tex +++ b/programming/exercises/scripts_functions.tex @@ -14,9 +14,9 @@ %%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} \pagestyle{headandfoot} -\header{{\bfseries\large \"Ubung 4}}{{\bfseries\large Skripte und Funktionen}}{{\bfseries\large 14. Oktober, 2015}} -\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email: - jan.grewe@uni-tuebingen.de} +\header{{\bfseries\large \"Ubung 5}}{{\bfseries\large Skripte und Funktionen}}{{\bfseries\large 15. November, 2016}} +\firstpagefooter{Prof. Jan Benda}{Phone: 29 74 573}{Email: + jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} \setlength{\baselineskip}{15pt} @@ -64,10 +64,10 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \part Gib sowohl den Sinus als auch die Zeitachse zur\"uck. \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 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 Entwickle ein Programm, das einen 1-D random walk simuliert. Das Programm soll folgendes leisten: @@ -91,43 +91,43 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: und die Standardabweichungen graphisch dar. \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 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} - + %\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} \ No newline at end of file +\end{document} From 778fde35faad435bc2d5e3bb77be4adcf9eb6264 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 15 Nov 2016 15:53:12 +0100 Subject: [PATCH 05/16] reorganized statistics exercises --- bootstrap/exercises/Makefile | 34 +++++++++++++++ bootstrap/exercises/UT_WBMW_Black_RGB.pdf | Bin 0 -> 31288 bytes .../exercises/bootstrapmean.m | 0 .../exercises/bootstraptymus-datahist.pdf | 0 .../exercises/bootstraptymus-meanhist.pdf | Bin .../exercises/bootstraptymus-samples.pdf | Bin .../exercises/bootstraptymus.m | 0 .../exercises/correlationsignificance.m | 0 .../exercises/correlationsignificance.pdf | Bin .../exercises/exercises01.tex | 0 bootstrap/exercises/instructions.tex | 41 ++++++++++++++++++ bootstrap/exercises/savefigpdf.m | 28 ++++++++++++ .../exercises/tdistribution-n03.pdf | Bin .../exercises/tdistribution-n05.pdf | Bin .../exercises/tdistribution-n10.pdf | Bin .../exercises/tdistribution-n50.pdf | Bin .../exercises/tdistribution.m | 0 .../exercises/thymusglandweights.dat | 0 likelihood/exercises/Makefile | 34 +++++++++++++++ likelihood/exercises/UT_WBMW_Black_RGB.pdf | Bin 0 -> 31288 bytes .../exercises/exercises01.tex | 0 likelihood/exercises/instructions.tex | 41 ++++++++++++++++++ .../exercises/mlepdffit.m | 0 .../exercises/mlepdffit.pdf | Bin .../exercises/mlepropfit.m | 0 .../exercises/mlepropfit.pdf | Bin .../exercises/mleslope.m | 0 {statistics => likelihood}/exercises/mlestd.m | 0 .../exercises/mlestd.pdf | Bin likelihood/exercises/savefigpdf.m | 28 ++++++++++++ likelihood/lecture/likelihood-chapter.tex | 5 +++ statistics/exercises/Makefile | 6 +-- .../{statistics01.tex => exercises01.tex} | 0 .../{statistics02.tex => exercises02.tex} | 0 34 files changed, 214 insertions(+), 3 deletions(-) create mode 100644 bootstrap/exercises/Makefile create mode 100644 bootstrap/exercises/UT_WBMW_Black_RGB.pdf rename {statistics => bootstrap}/exercises/bootstrapmean.m (100%) rename {statistics => bootstrap}/exercises/bootstraptymus-datahist.pdf (100%) rename {statistics => bootstrap}/exercises/bootstraptymus-meanhist.pdf (100%) rename {statistics => bootstrap}/exercises/bootstraptymus-samples.pdf (100%) rename {statistics => bootstrap}/exercises/bootstraptymus.m (100%) rename {statistics => bootstrap}/exercises/correlationsignificance.m (100%) rename {statistics => bootstrap}/exercises/correlationsignificance.pdf (100%) rename statistics/exercises/statistics03.tex => bootstrap/exercises/exercises01.tex (100%) create mode 100644 bootstrap/exercises/instructions.tex create mode 100644 bootstrap/exercises/savefigpdf.m rename {statistics => bootstrap}/exercises/tdistribution-n03.pdf (100%) rename {statistics => bootstrap}/exercises/tdistribution-n05.pdf (100%) rename {statistics => bootstrap}/exercises/tdistribution-n10.pdf (100%) rename {statistics => bootstrap}/exercises/tdistribution-n50.pdf (100%) rename {statistics => bootstrap}/exercises/tdistribution.m (100%) rename {statistics => bootstrap}/exercises/thymusglandweights.dat (100%) create mode 100644 likelihood/exercises/Makefile create mode 100644 likelihood/exercises/UT_WBMW_Black_RGB.pdf rename statistics/exercises/statistics04.tex => likelihood/exercises/exercises01.tex (100%) create mode 100644 likelihood/exercises/instructions.tex rename {statistics => likelihood}/exercises/mlepdffit.m (100%) rename {statistics => likelihood}/exercises/mlepdffit.pdf (100%) rename {statistics => likelihood}/exercises/mlepropfit.m (100%) rename {statistics => likelihood}/exercises/mlepropfit.pdf (100%) rename {statistics => likelihood}/exercises/mleslope.m (100%) rename {statistics => likelihood}/exercises/mlestd.m (100%) rename {statistics => likelihood}/exercises/mlestd.pdf (100%) create mode 100644 likelihood/exercises/savefigpdf.m rename statistics/exercises/{statistics01.tex => exercises01.tex} (100%) rename statistics/exercises/{statistics02.tex => exercises02.tex} (100%) diff --git a/bootstrap/exercises/Makefile b/bootstrap/exercises/Makefile new file mode 100644 index 0000000..27691d9 --- /dev/null +++ b/bootstrap/exercises/Makefile @@ -0,0 +1,34 @@ +TEXFILES=$(wildcard exercises??.tex) +EXERCISES=$(TEXFILES:.tex=.pdf) +SOLUTIONS=$(EXERCISES:exercises%=solutions%) + +.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean + +pdf : $(SOLUTIONS) $(EXERCISES) + +exercises : $(EXERCISES) + +solutions : $(SOLUTIONS) + +$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex + { echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@) + pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true + rm $(patsubst %.pdf,%,$@).[!p]* + +$(EXERCISES) : %.pdf : %.tex instructions.tex + pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true + +watch : + while true; do ! make -q pdf && make pdf; sleep 0.5; done + +watchexercises : + while true; do ! make -q exercises && make exercises; sleep 0.5; done + +watchsolutions : + while true; do ! make -q solutions && make solutions; sleep 0.5; done + +clean : + rm -f *~ *.aux *.log *.out + +cleanup : clean + rm -f $(SOLUTIONS) $(EXERCISES) diff --git a/bootstrap/exercises/UT_WBMW_Black_RGB.pdf b/bootstrap/exercises/UT_WBMW_Black_RGB.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9aed92162b1d4345d994cfd0b8d70be762fbec97 GIT binary patch literal 31288 zcmV(%K;pk8P((&8F)lR4?5av(28Y+-a|L}g=dWMv9IJ_>Vma%Ev{3V57ky-9B6JP;6qBV?OT}-;UDr74YW^qwH;b?I-GYdHM^_@08LDzkT2A zVt$uV`AT_TseGjNLHL=8aC?V!!kxp4mMfLFsi&`>{m|Qjv9r_BxE8nioJEWGE(rUm z-??HSZ&NOrBfq;AGu5wum;1xzZMAS}&->&rm#4qIaWZw}x1qkX#whZ4dZ)DEcU8Jp zG+O$1eLDk;J-e_?qxH9;yx-$ITI$||fi=d=uu18=-q_^yj*~l3dkOH}WMIXe`+nf< zuT6qEVVe27`Def%wj>~mTizaC{HaYnyr0Tra@zxbUl}h>mE(c&-MV|I_3hzkxF5fu zhWp)zM);YN@OXOyJn{lD4SaNtjgK)kJ;b(GQ?@VU~rlJYw{B3A2jstF8`;$jnuwLQf9Z%fvva<`G zF*g7%W5g?N$+y-w4Rw*Kx&Yo>(V&?SPvVgmkxF+LcR_#@78oY(!MJ<$x9C6Q2*@8 zJ8~e`wKvWrCibAMzb7LxqbGuLW7(`#`zZ1cM&k1pQ+U>F(1J^ded(fdlO-{{k%>UTGYm>Il+ z*a7aj9ORHKL*x=ybxF+^$;(F+g4myHQ{0js;fZN7;GWu|*??y`sCr4A^SbsET~qhH zuwh>uX9KPl_K?@jbKw)usK?!eabm5arKIxb!UIeywJyL5O*zfuk@x>GcNh0dfzzLl zye+NQV;pY-Xv!Mr0c#?w!85(RgI)>t@I2#OEqu17V>w@X`<%=DZbVAQ6?kFfJYq)|xSlpvWZhN^Yy5LufYGq-zttcrwm=a%4v0KzkU=!)z9X3g__SwT ze}M1W4?=r!nthRCuEIgh0l)m$*Lgy{Zf@byk_4_(zTqGPyM=V(?KEyf(UG^I^mG!R zw`G)lF=6EG_EpB+dMRA$t4q!#lWkfbdC|@U4ma7t%ynPlNaiQ6mJ7(8Q#-nNiO-)w zb+Nr@;Te9(ZP()5FEuLfzJM%W(eS?V6778V9u&fc)Od={wPEZkjVF|?~@zUiTxZcFEU{b(8Gfx_1-QOwCepP*P?(f>JiH{U4*gK5jS1M@x3pXB9wt%a6TQZncHh=nQNbv?6CdK5nXSf~idceLuuCs-AR0-if34t-FF&2Ex!!3I$ z;#zxG?@78DYt}?wY-+l-9*_@c0v>hIOV*Zji-Ks-CXPN=OUYoawFPyK1Acjhq^Yc? zmxTsJe=m~+e*Nv7bnwN4YWZIT{lzko2jSxn22ypMzI|bnFqguMr*Y>u{Blsa7$KeDRtz3fiwE9sjV2zp-%S${8~mOEVf5Q@(5(&O;4QGM1E7`*O{M9P zOfp%d9RRyG7l=2SgpBn-BObAbSJYHP)nPXcLW`*-iOvg$9KzK$e8sdr`w^3Tz~mLl z(`q47wRl)awH8lJK*%oDb#ceJ#3 zr2w}wH@}XClItlOzbyy*@QOqI{yv21XL6IT*!5@#GXL2vFDBjm=q;-B!u?$qz>vpz z8?{9FsaxCusV4@rg+#YYZ_u;1{yhxu%Yfevz5+%czLDJW!xn08);n_va_?{jk14TX zPKo*NXG>qR`C*IM80b9K@8ZASdAxYkxANh`rcuPQ;kF0d%f^Niw${WgTV{X1a`*9d z!q0QCN_o5&r&%RwAG+0KN5fxX5G|50;|W}l`A}#GzD}LTencaOKzwKcUbvg}48@8* zd!3JjxTnQ<@6eXkQNb%s5;+$5MNPnWGMfOhn@5r0n{lVcCXopS!GSKazc*3QMOmRb z=nuzrSv32wg^~i;J3=A9fF=V@cRQ%|dmp^V6pOJQd5`$iUC@Zb?c35xld|j?x&)2W zKWw3B{G$DP!t(Q8pyrndK1-4o`aaeSgHw4w@KjwbFZc{-E*@x|#j*`4T%Y%FR}(wD z(jKY&a520?c-f4XEOlw8xjh#iA)8(jMQwCJT!hB^mFHh(`lShYW z*B1^U)+*TtO0Ic4QO)Ux;`eQ+!7zvdKgCMecp`rveF98miI0yYqRoCJQ8ZhlTwu(D z4O|OwxPYnsHk*S_+#v+>&P9t*_on&;aIMxDK%$KXs_pOOSJ?9I7*t6@n?{ar41DA! z_dua`(h~A=4AL6BOi7=>tSa^2i#7=wu~x+D7ih8gLZM!1se*r2)6y0%*xKY5<^kCH zX7_r9h6N3w!+r`!@yt`62ZrBmZl(7NOCueq^fuJCu}`nGLzT`$a+i&4hOe!gUr%@! z(L+0M4Ie#l@56!SSvF?mmZ{=enAEZe*2cA#J(G9>{J_ye9b(4zN8XlJj$yoTF{8<0 z8a^hnp72!B!(I1MyzrCTxma(@ywCNlTT8l!3YeI+cikF| zg%<$_-UJ*vmTNU_E5mBBm0`hFCcmE@vu!mC2h#h}Mq|`gMo?MZz_Qd+pZ(61#56SC zFI?Jr(^b&z=e!KPdix1*Ok3@~L0q@j=WOAPjQ8iE+Q%mkjmjsmWNBfDMII#ihGwQ| zTNnZp*Aqh3qYGSg<Tw(~ zbguV1P%`d&M_%dxyU*UU^0Jppb9RxO)NxoCf&wk12sn@?;4m<-52{iidf((rv0%3@ zS*U|@>(Yc}j2AR(P#ppJf;~JpIc{FtapU@$FQmrB%I;wyp4X0d6+(}0ek+`?5>MM` zAdd5&7T$iAKgeoGk8l|lhhEEm;AO}I47uVIJ;a~)ux!5!8KsezC#6i0)YT_47ZZcyVIYh0Nm z>c1=XD$R+RwcoGQ3-w#nP2qZY;oBGsBty=#JCba4KhYuhItaGhIc%9&KH@_J;;uj=Ai z+TZv{U!8g!K)HGhbi*-~-J;3%pj}>!zEsMwTu-QjC5fUTRIys&7khkma2s8_A!O0j zVp$Y$C^{jF0-mM`5=A)>D$SNG%9h!dEDCs9HicZ7`jAk#WYH@Pn~#<-iWX{1;-wds zszSnO8nPcs4o#5Onsvw$L=&VjZ#5(lKM@2G@MBY*Fcd9~GIC%jq_b9*Ja@vnTF(|@ z0wla~7^E?X(DO?aO|Wv0ZH7$Ks^kTi?;t)#o>|r%6i>vJL)qMsW$EY2+nzreVX+5<=0!!+tzL3yNjX3k}JB-y~Bi(DwhTRL=YFdVve3wdU|7mEHN@uo_8SPory zx9kQg{L6CZ0!a6x<;``Wsn91(?p!n)5Q*f@b;3r>Xj$G|*V!~FjVImsVzU7TXD@dy z3jDXG3~w$9YP|65&-L$Gf2^%-Qx+d$m9J)C2S@#3C*g{KEWZmW|*K=jdet@nZW6N4N&fN7S zYf+0nw?kLTc89U774Vj|_7jq|*u%5MPQW}tOV;97pDk+Xo~TRI0=(2JLvIYRZI-pT zQKPDhTX3(ZwTD=Gwo^VXzG0WS@$(PE}!fOZ4JBL3FXFUI0T*j3B z#9SO7FGs*;y~J7p`BHAj{aGOAZ;=hi+Yi?JL)vurV;C?PhGUt!P{T2kqeUd8O79(u z0s1!T>7~Q(o~#s1m}V}x;2;my7JE-#3i3oJ+_oSx-c^vgw56?0$BY&Wwm;Wy2yyFd zkw4ejGLt$fX}fP-o4|%Y7bahQUgXb(7Ey7v0G7GT{#t;3;91nl68YWbJ9uXX!S(4i|;YrqyG zUYjn#!0H1wwj3?QmKWYx;zHq(*-!#f0{pwh0lJ;Jh=z< z=^_=g--~>@xIRfP5Hmcn#1Y7+>)-q6l?CB(P&aM*JzBzPa5Y%we_^s@ODXU+#5O?@ z1eYy4kWi_R+NLAcJHU^@CNpX#QWb85asyrq_ z;SZn8f80PZsL{6wpJW+b9X!@*F1|gdLrDNN&I^yH|AFV01n|OPAkq_)#BF`^UDIlT zO};ZZ+c1s3-U(z_DpHjh6x*KPec~J4SdbS<^#hgf*Z&(PpYSn< zZWb#xw~t+{?RK$4OYi3swo|Vjs-*h;ja22=wT6-4Lv&ah4p{o%)nNTEdbl@Fa-o50 zx~%|C!EaOhOOMB`{DrgCb8;j+ZrP?Bs(;~swY0y4Mn09laXdr$Yj`=>?FWJ(`R@YW z$(81%6mPe`U%Le(>IV!z+$`9f5F8{p(%l568gLPnhCc*AQX`DK>P*6_Ee;xZbzzgK zo&`%y}_wxN}Eo(6! zyOUWZN%f}KfvOED;rBSbL0v9uaJo1*A?_2J!C`-Q+@{) z66cgbGo(bghs#SP#6&dlD29|c;mWXu#0`e>f(=K+PdpM5B06k!Nr*4V*n=%0zAbQ0 z-T^`IQ83th9ty%4`RxS_{s1KZF5P88x9F^w@5R|`Kw*Sz)sB}ZD+`Tv;XlN`>^FHn;2gS!A^&RbDEWVen^N2 zcQ|~<0Mh^!AwOq>B*fKV32~Zf5BU!PSYsZ!whu1|HyZ9E`E}1)opwIX7+CT=Eeh=2D;6dx#3_aj~23=2%tDv*0;kk z`Y9mttLZS=-P^iBt{2qd{<|e}F{#=#lbG1kX_0E}xoKD+g~1RH176bMZm@8;8z>tt zk{Pn0$?6g769Jw(*5_@ZY9eBN?%+2g)(0_+tsb&rz8wt_!9KUW6e8H?4)Joyh9FV5 zJ>no60?yVggWlsxu@EQG5F{?xdCG>MieW(&f4{dQB!DbO-6b2MMJ_~P+kF|pu2>F22gZ|l{0Yp0NLEg5p;7LRBUMW9D%OESdNA1e|p z6WsEgvS7%?D_=X-=bu~X#gyk+VWtZ9*)1kxhF7=`8t7fMDdFSTT|1)y4hR z`Z^O^*jdBb1PAuHwV-G0%K z$j|(o4G+=uv2qUTGN2$vP&WK_(UMlvEkA6z+itlM+-9D%dOcw)+E+_BVC@zS{piF~ z!&m-9JF#UPINy>~Fv9t_2ZuH6^@Tr4h>V!S3-`m_4{-SZ1Q*lFVtn*SS&R=6VZnhZ zM}v4N^pLi|jgQc4V54J83&;6Hoqu?~3k~s#alX!l9kxnuQ?N7CVgb;6+?Rm;+pp`nyhEBh>QIkd8UMY!q-VbbR40@*gx7x)-Y z1inTWa7C)=4`&JYrjhl#?T8Mp20WzxTFqNoOoX1u+cTYO{x%dV z7QHE;5%b{HTPO>(tsrhz4HSC0Eix2{v0x+4f*0qv2-nSX^>fm)x7+y~6!Vs~e$mw1 zu{)dYs^#Y-&3-9J_uD7EgH6<6PHB{Js$AP9*cAf<)7*>d94kctB<9-(2ygR zbH@F(91*epxbn(@^DkW5sjI)%EqOeW(&qh7*obnpWO4%VGJX!6$5-z^I3FCrdZPVt z9Jzw4IBo*nN8AKvXFf?`6xe~8_XFv+hxmIb(_e1E?ftOch?cS!7z{L&%0N@} zXm5?%&M5aSp`89Bje9^-hyqz(EFt|`ajnxndhz>1O{aWXI$`b@jIz`mFC>MPc4Kg& z6nuc4^!0jIxrn?ii{5I`Nm-x{65YP`L31vj%Q!K2@zk^gTmQndY)4VMa#Hucl0V>94|9;K9;*|LMJNf4f*;x6O{QJEe zn?T_WZXcrcyMzTLN(wmuX_SssA{#lwnD-7Q!~)0(aCfx&Us3`Nhou5Y3Db`55)uIQ zDszH_ggAH>5f&&3VS(F92Or{b9OQs?jswy$?oP=S=eRc~LDM;g&#oPFaE@OvIemrB zG2EA*?VC*p=gt3IFPziKBE1b~^g*{-)Cc(hb&}n%j&iRnp$1M1KKGn#OaE(}hf90j zrg$t26JV{QOz-M#c<=pBR;a!MIdzudd>m2^9~jFwgQJ^^6lgeb=5)j*4)e&%;fRMB z;g)v0)?pr0uLV3D+rPo!*%XjAtng=<$z+mmrTu&sAAZU;bt|Z3DgW z9z8A_)=Nk`M?-Q!|FwLA2(;B`q6HdgfaYoty1#l8$nKl@82=7>aD{Hpm}jPkn8#Ev z;Gy2Fj*W0=<-1e776IN`8>1%7%`e#lB9>=^Lv{dz!lcp8-+@OQP1=ZRes3cld=l<_ zARaD)cNL9zp%J{|dxnX4*-j-UFUxOY@L1W&_@?c4)QB~e55%x9jXmav-R|J?+pBl_ zks}9m`?2x3g2XO5fd13R>Q>&$AnP*%7nvfDCTtX#FncD8jeQ{q*7-XTcrCl^@(uuM%F(9f5!5`$XrV}=0dea}0YB}Ob`sO6Z8nMUj_Eu=hp!$jRGg-JWn!Z81_{CD zDf3`V<&X2~VLVh9c`Huk-J42iUZ?;{Wkt*yocH0Ph!^Vmh8}4v^`}1Z{0V@?8{JZ^ zIVM^rEeKM&fmGv#vHX+s;=%4PRa$#1xGYaeu}#cJv*V8ey60x4i9zZGKf6V&(*fqL z*Gv7{tP?*tcFVO!VD^b#R?q%~<}kv4`O&N9aOfsRR2=nSp=hBUeepze2P^Y{#|p?5 zg}bo&-AO?8h*<&iQGg>bQ;ZZ_+Os*S{fJnp4KH=^Y6)iQY?09<=~6bg1dv{1i=9FX zZ-Vv2umiXlDrEy2>0qgtIB6`7iur@g!6hfWrG&qjD&@b~67YgwLgqe-6;T5}&grYqZlVR+=33lyNhdDq>RIT$LF2*%x1R!eXq> zmhqVNFLiNF*X}cTD}Fbx2BPa6%kH_5a&cEmacB2D@K>=d=C72EB_9mdLR)i8#8Jm5 z1ROb2#9|S9(%(0TUgEI=yf&A$p9nTr|C z0cnOZKSHD_X)#;G8OO_s+uF-3cFQ<%1-}(Ive>Po;qmqmYs^k@KON2u_&RZ5KT^!1 zJx%gm*d9kR22@A)rEVlqOupDI!nGW17s+uci|+#5t@u%H^$m+Koh`HkWqbXYyIKT( zv0r-_$0Lg9+FfMllMx5DR>v%uj`S6yAfl#m@LT5X?fL|%6!U|IhOE~S?;E875_@6BXZg+;@qQb7dVB579eDG#9QRfY3uEvnl-B7H} zgIi{XgSPn7#N^Lch`@;eaN`23r)Pi1;- zA(#h)zKW5bIG(<$$cO+0#h71*?Befx@g@_K26UxIdmKxf$Z?#@|9&4#=3f3<*DDZ` z5ccHY2b=(eFtzIChXv!RO?Kfb6KriXd!?!@A_iqz2Gvv@*&Q6m_WSf<+ zkRgy!xjEN*cI}}dA-@8uA1QqYy@-ClR>Ql|bwT}GW+fQdwXGk*bPpE}FhBv`@0vGM z@NZ*8Q6sVjyQ6Cd<|iC}YUKeDBU32pakT^U{d1BE{w3}0fQl|&!#D3M`XIk&<=w%i zLyWWyf;0$_@c6Ycho;_4MbWqJ=cC&P7ZoW7qXR&97X%g~hziIHbY=PxAk@P*h4g}FLs#DqFpC1t?T$2lUF95ihepW-4c?47eS|m`N zR*!@J#FjMG)yR$pXb3j~7EfZmpw84M9?9DP@{YZ3%Arv^6CMXeGpI9%JZbCqTgp?+ zZ^rTo_z(mW5aEpPA%4s$nDvviQ3xbEW5;2>mh zYNbd{07|xy-j5vwg zv=13kK#XUU(ubbbVhuTn$5L<5Tj7Q)_6o1x8%u@~N^dNJ;&HA9N{geKW%#hoav*wJ9;O0N2oW1E+?!@4i>&>D0CDm3fpxBUa{_ zH;}--P ze|=ViDXJISWc*QzxQ^IyPk9+hTB9t_jcK|wAFdN>TPWfZ+ov4HM zwcA@qJ1*!lMv&IH4i%{}IRR8KL1uV(J2Hj=OJ|pQc=5xV2oegDCNrQ_VLk6P9z5oKc zV#Lv)`7osGj=5%NE4&O0`>gwyTYKddgbx!^TF3Hs9{nuMg0VyjLkBCO+*c#*M7n60 z#~)(k?^nPM|LTv}<9E1Id80vAEk9;Dk5G(4ISOQ6)G!!R_vm2c$RrNuUkLxsfZ1u& zuMDV0$OGu+jAPPnhfz`Qlj+8eTS8~dAaf!pH>nzsy$Z^Ts(N$90p3mCLN!r=t{kB7 z$bp#56qX2!B>U2peex-0XBfTK3rUlI@36dl)uP;#ebO{Xxk;t(m@pOgrXXL+H4|oXTxbkgpQH-Na~(_o2ZcEfEG+_WmRHIc&L!pOeHOUvIsgKhXr+# znt-Q4QckG9NNc)se7^W^P-&iFK#kvk^RuCih1EmWJlZyuk zbEIOf-GFQ7>TIA7I3S!9WtpwKt8P}wU_#UP*Z=Dl&VyUVNi?jI1Mpdj z2fC7X-%8IhWVp;LU%dB>=aE|kbYSSW{?@tt1c)d|`uhjmbg3EY)T6N<>RR9HXH^0y z%yOdL0zU{IBvX%4y^ zL+yr6w122~!cEMIhqy`u`Y>fasYCn@#xnD5s*|Qvl7v1ggMfYVuZ?%VU%imWl}e}8 zc~_G2)wkrl7}*9rayML_TWogByo(>+E7Qd=uiuq~-RpW~r*7RV|DGElGE5C=E@B+p zW{_!rvdA}_lF6uB3AP%@Ee8ZX8f6XP{SrJjVALR0`b9t#;mMt&;2~WMB27f3q|_=+ z8x(XI!5i~lGQx*dFzGt#pOY*-6eu?2`_HhiNBVg_V4!(-&TQ`5H!D0d?-@5MgXGtn zijBH${9#!`+J{6y=8y})f}Z1gM}a*mq*P7jR@|WVX(-qSDjb7Ag+K7w(t@Fu7&QA* zbD^l0)OON>v1T3;b;i$+Co4#S7Kl!XdU?q8r41>}s#Cup$UFjsZZb*`v~9;t`&-k^4uCt8OTSKf@Pkdtp&XHsq>GLFUbJbphVQ zjW_sNMSb0HVc3J&%6aXn2p?ZpCKyZ^8g`Hiu3n+3o!$o8ekS~ZZA|;Gm?$eY7kJbD z5g?or`tfv<&HciH)9ZPv%vn-A)?C&3loVqB3RdZ6IEkUlUs?~p1A*KE2(feY+YkuO z7=o6u0QOukSdHu*JPHO?^{O+tz**vPHVhYG6c2@X6QUzKy9{b9lZ4*CS1Mcb5N;UF zr1#gVKw$-;9F%u$0iujli4TaDBUx+UArd0i$5pNC29rv^85Rc7Zm}N#{yd~~0d*%q zGHmhgXQ3`q+0Bh^)>+2K4EhvUImX`y*~3f9GSwkW(V3VdcR>K2~|8V~3C55f6vghl=BoTMIFl z7z0Ta7StT&L@S2=1lUVVOjHMcF$fs0oglqVEx8743IB682=^ZzL$HS=RHC{DJshjz z^?=74uM1x->3-I7fLV2^M&?)W_gUF7_t3bi%w>_Poh8g?=$Z+Q&_quu45ngo-PsTC zTIv+6&QPxB1+l2gR;w^@Vl3@1$})4IHI@a2_V;Lj_Lr}hxwOA5U_H{I{_x!$>W`@m z8KM3_Opc10Im29@H#9AC?aIRx(@Uub zSbBr_6;qZ{FQ8EBm1k~+9)Qcry!USjKw7v0dFXl8!WQVY@1>S1st*>s2C$d0cdc|K z6+;Ie zD6E;<11vIKh{|EIh&Bmj9^O}>GwSl*@i_Q}+Pu|ffvQt57FWnN)i;}hDvK>llK z^U#uekE6{Rd%1`Ht}qRB-ReA+=zQ5JH(Z4!K3WjD1%^5gHT=K>ggP%^sq;#fLFAG; zk3}3I)=1&RN`_RP;R;3p!EG)nFH^z1F;-*&F3VyLD9J*Odcq4TE;J}u>O4R#ly32n zYq8~s++DH)t4h*Fqxz7pD-m^&nTf<8t4kuDFy2&2uhnl+U|sw=sK%CT5YV#r>;_J! z3?=W?RLfs052Do!c76?)Gtvu`E8{QHFin|aqF zQ1^$v=2J|?`(JM~%Fxk-5JzEKIX%Zo4Q^Ikr5`-3re*`W;uEOtqLVphGUY6D*~{EN zYI=CDKLOz&WjmZ3hW@21ds?Wq1ALr7DPY~r8$ulf`?4F7<9ipWBu;nSzp?->F-O&Q1TJ}2tnm4W4#3Zkh(Ohy0EOUm${b;&Ex(8e7)cY6@171-U|3) zTDH!wa!l@DxlLwB6t;4$H7SZ~!ARu#05X+So>l8BU6mOrPsG z5Bk={ugbInXQD@@wnW9Jlw|M(Ae(d3kGc37Ohmev8=T3S*8zNPp)RX>sdX`e_`(Op z`1<*3=Ea21KLIa;aKO}e7=XItYL#Baq3&puo+MniYR@s~I-0#Dt?Fp@bd;(fc>2VGxmO-K0bm3@$AJ zJ<8Oow;pA?jvkS>qQ-C6)53I#*8y(1AsNQA3HXIi1o*fW8r=8TP^9#)b~(KnD1ZnHYN}N{+m6XE`l$S%JiKAr zXN*s+QkN+G5vfE|0SoJ$YLE;5La1LYSa-zm)fj%@O$SXc6r*P%%@E(LAX9(QVNHG9?M7F=HQ_T{bs#FF( z0cQyt*Bs4p(Q=%jLrm-3A^7S2sv*{k!{-Bz17KJaz2eMj5g?n2H_;MJ)#)+vPc!q4 zY9Ls%%R>E&=?pATVSDCsxWe8|Gd;1l(|p1D6}Q!8yfC=XCSak}6vt$oLyFbDF%oGD zx()~$#+2)m(AjqGh3;edVe!`*Dh!^bk;2DIJ;T#xwAC?7FL*=-Vz>*WeiQH6=L50E z%E_?S0fmp&vLNVMi-ZM)A5c5j7a^Cu26_)WRSLTivpmM$I8$kFt09xTpy+|z|6L%z zooW^)oB91(4Vl^@B-^O6_A+GZmaX2Pa{17NyB<) zrXvOIZMFU<0nx3ZCdfkfaZV928e zKVPw4>-WN)redg`pvxJNWIiU7}tzJ;T6zk z{a#7z*6ZW^8q*1n^MkBO@{IlZ0&Okc4V)fg=pd)Y?7=wq=U5$lFt@cjFh{;95Q}Ri z`C5CH(745iKT5ES$;ZYeM(uiEm2DYTyV!SwSD=Mqqs@N457Z&~Ibjy^2LA;Ce^UR& zbk7iF3~Tc62|*5rt`21QaRbYiOeTq-%{nul`_kuB1_DH@%dVKSD#)QyDh!0+q~EQ9 zmR3uh5Ur!a-p>*1R8B7JNuoF@^3v@wgN4%W{9 z$Va7bT&Z%H2}Io>P=V!^R||1LM~XFLs(j%$8ZgF8c!7Hi$^~H!DU}|4wJO zn&{`lR1Y~Ixc!qd2i)zBV;D{ckZ=r5l_$hi3TJbs9ZYgW)w9Bc_{Morx!@p`&4 zsE#?pz`-y+%#6a2=jqtsMKfLn!#%p{0pKbWXT`VZpz4f{@M}wpA|EgBxk2ND zA!EyW7{`DDoMGhVqB20AhMno{yGRs(F+yL;Og8dl`UulD1;YycBq4qnApOR{Hk{^%is*Lkl;dn!=7qDS_W`hJL9IZfE` zwTgQ#GQ+K1fYhD$E+J-krnQL>ZF4&II5~M*{N9u((+Fbl+9-59z)a*-=~az@QIu*S zD1vs!{{0$CBrEhDKDNgFuG~FFeZ{8xJ;m^^UN6@$ieJ}o?gQEHHH%w;!=BARXrWYRdNn%{wxLBL5JyGcX}0rebUNLH{R>zqnm1vsE&9WGI=S z&WE9k*(kwb?w`RQw@KeoLr7Ju+>-f3-=BafbiwHvUht)^HA5CfbM#tLWLcbZE&qIs zK>{yUh8YLKB1z+cut)Xl^l-q_Ih{05mJjxhh)Ik!``$Vm9+l$}jc4efzw1^91 z>6O2*+3IJ%iGs%cJPL5iWT1UKP<$zAUiR#VMbMr7dJq`P&c_A zF7!IqUFj25aKk3N+bc%aFUqd3v5Ve zfIhTY&9r{)R3kw@FOwM{@}lGr7L3H>uwYHHThw0oGX_62fr#$~48x2LCj_1*^1j5W zCP%XPRducW=97r8t6$ps)A}{jpUK>_p=*uU4W7@Vs`W3WJ>|AVj-A$`o=bl~$r%#H951D;nZ%4bYcsa!km+T$w2g=oh!E zQ&54koKk9cb3MLaS&A{Og9Uixu`d**aydy>qR)B#I-lrmU$Pryv7gV`!b_HV>a=g! zRR1uX(or)xZQQd+$srvEX%m&!bzQC>HUw|jbT_u6M^J%Q%O+ORZHw^6BS|^bVvq-H zR>3Wc-DDT{reVrh{f8U5^T~4ZX6=15@>I<=ZHL2SK`-5>m37Rb;yW31L8*@qe(GT^ zfW>eb3~o%|x}2i{VmKU=e|Ae!rgK4*;x&Evw^PdR9w2NuR06a$-is;%;RLjc)FBKj zFTrP1$6$Iq7F_|DMUqTrVqew+i6Q}|+Hrz9xJLu?LU{`=AA5c-A5EJ-Yw9N>z{#G`FxQ|GuKiut=wt zmj)^0CD8RL2b@_36Mh4$=_N$$fC-g=S8z;)i$h)@oTjQzL_EM`9i(`4dKHWhsQB1w zNKEy=-;WXgodcYBAX)vH)#EPw%5$*BPdVT{snx_uL1|>_#WCXpe`odF5?%d3v*mNm z$_>Y~R*UBqJ;WIQ%mK5a4-8ptL=6100U_^h07xzFWNcdeI^^zwIhi*B%h~Ae)?{x5 zsp$_vko5!XEuPkZ5kqvj#~-#>qc=QhgB(v|30p(*2b~gp5fVjrQ2DD!eFG0FB;PQy z(^s_CI2-bzVnR~i)Nq`FfabFV5I5yIZ153-ZGHVN8N)2X74SOBM+4nL;lC&K9bMw3 zn^=Sb4qnadgMJ^Uq8L;C!}%0eUg+!hnz{SIR26#59NjzPQS|QAJTbNndhBkvJUhUt z?zuw&buxoIQ}!ThLX8(S53phzO5s;zxX{TAbK#Xy>3UMC(w$w}<_}LO zoU0N0R2n}fA*wT!5D=0m^zOOgv4D6KZ#jjiant;JI|0jTCp}7 z{tsI;IWX1nyQyyYgl@b;p%~qGKs%C#N1EcBF0ul_Mz(m~4czHR#X}b;KcLH7`Jw0V zGZre8t~mS!_LKYmu%Yh@@G6}Oq`-^?88LdOmpE3$c=nAJU719#jTipfdO%}|6W5s( za52a5Lx%8-g_KY8OJu>eLp%3Kmv3FHwgCc3mtDIcMNl`-1!B{f@AV2sSN`83^bZy2 zfLQ>;q80ta?{vssWmTA3kGP@~Yc%33d9iExc7`<_?5WC@zslvAREsSP;(6(>Sb`l%&g?Q~luBi{jHZ$6o3m{qTn^r-~SGaNOi%4PRSaKOZ4K zOfBT08e=kwKe{m#mhT6Xt#q85DTgUwE*@U)Lr;75?`7Fw#q`5~bNBNT$#p}Qpw=0wpXK$fU*`&C8;J7P{c<2j&uQS(xu8W9MX>RcfOL z+9>Q0B>xxLy26lIIqf}?BLd`+fD25~m^2I~5GPduA|GjAK2%OAyOiZqHg+<__e22~I!05Bl>Qs%OK0l+*D@mE+4IVWHh_ z3ew$+#Y<=61rTo>@L>+(;y4(k?Adk~0wpJ#AN(jM349WB6u0iQJ%B*Lb#sGqYFQ1PX^sz& zjveG5K@SuO66LSrzT-MK>Nd}N2qHuCxM@RVbA+Zmj`lSp%Eo|b<|8vV3QU1GA zrEwv`&3=N6j#@A>@Sl$lXR1+1TaS9^;&Ke?ah6p&9smsg4#rR$oURUcG*B@%r7Rip z-?#unB(JK!dBJWC|z=m#Et%eYGT6ut?uSA_Xm#gn(#)=1x+lp$WFZ>xFe1+_8GR;E z7uHuXPWduI&MD%bPDm|Bk|1?|u zX&eke(4DfzzykgbN=0S34Oefj+h*+wKiP4_upQ(Ny9n}{V9|{98Ne)7xWi@k)LT%p z_4N`2`HCP0oR0wW4~}$O3@@#-B%{w6#k7YK1U2GPHcZkQX#c+3K!FqhX3Q_p{Qm03X>s$?+aD-H$ysMc_!8}eLwZghRCvzBNGH+KU}A% z;~i4(xSZuo-K!Y==pM0i;wJ{9Ma4=ZYvDzjJ*|zIa2(K9TxU=CKY6Qdash~^Cs_DWWwYRgW40#t<1%6l;4mtEB>!ot6j9OQb4M?4U#Oh_!gVv~qY$Ol|B+H1B~D z(7YW`8^-)C0CFSUhUy$`x17E$;u9b*pP%8m*?3<-Ye>#lE(@tojxUqm*ONV?n?b1= z*{D?+W%Nk}*(Dc)3RJ5t;W5x#?g3IHC<%q^xBL&#{5-0u#Cc@Wgm9PgZy*t>WH(Vw z11GmudlGV*vr(pywKad8K_^Y=kHCmU5Qi*zPC)E7rtgQsPm}w0)NmL+!SCAvP1*fUiDx94Ri6`|*FgkxzY9*pkKxf>BuU5J-V2)!4xh{kF`pFrzeJ-Q z-oY*Vdx2V1_R1GUEaWg1GviQ`Ir;to#vGO8KSf?Q1Xe48NU^D$qGyD%IQomm{(6I; z{DB`akBMl$mdpAxsf4wURDOSf%1aXg+{XS49jShHRV*D6mdoiT5a41PT~lo9QnzE}mBPVsra0;l1IO{-M>lIfRILVd%Tb zYV3td%Y`@MHH->gjeaJ(c;n&{MKTq6;ldC<*S1DkwKs9HAi7-Z`9NrLH4v~#9zNF= z%m+5GC(gHo{4|vH?r~7TSX@0s+F*B3Myw?~@KZ2{Da^;$MKFtRLkX-!sg$-+iyasg zq1|_AE~hNi7ADafXfHjUKVRFi^chi!)!V=-<_&f}!XJ%;}4YqL)) zKh%m$CnA3GLklzxR$H*OI{po?N8?3-1gg#wnHnjNqPrf8DL!sRM#S~9ncK?I%y^Y-2WL=z$Y|gO&9(-!K#kWFCp?{MTobVPF6TLfwuTq#MYkvByJ}J$#nyUbu~oUB0W$cFuxZ(3C6Zjlmq!l@WdMU6*7<~sWoBaj> zdi>bCcK{9FwP~E-xBB7O7!zLh@#-&ydYj1j9CFM`xKW@;>6&h0Mf&=XV>hQ)i$o`p zb^1Jt)Joc^Wp5F-!|o}UEsH(vKG_mgtLxW~@be6RfAaSkK_w_LR;FmgTO$(JVRdT4 zkWgL$COOhv%*oFQOpVUGGFuposSWe;dWRRvPJH&gbwu?uWxRv{6hVy0?LYFw@w4e% ze~@xj4C8Y^PCN)C^>pH|AG;P5Yul*iy`Kzj%&Ak5-~E{knaKM#3J7;S!7ZTcW3P0O z%ewt)r&C8osu9P>OS@E6ZVY^i8^Q4&8`Y~43NKFv+QAH?zAs522+!5?LmK zscVJaVrpdE0Q-qwb5Bxc{tFw3=lBNn-G+E^igM8-X%1XNRw$y=Gm~w}^Q3SH zHjpc^-B*$88HOR+E=hvm`6fibP&RNQnF4XbN6Q2R6+s8V*zU#xa5z?z^>$lrpEA^( z)OP~jIACXHZcaeYX`Hvcvf8mf!^-$%s8L}=*f}cl?+J~YPIU@D6YHwq;J}V!B5Ym< zpkUk5<^E@p9`TYxZz3no*~KoD(qYS*<3m{0s2x-esF&-ws zD;G68Iy4m-9f9mYH;D>7r<(a@#=LxDBGS7}$}S=$8YuS5i7Na)nZgI}hf^9NzN~Xf z#LMv%F%kmBH`^0_{S`)wg)^dXAD>uJNmzT#r~W)+J3xsO$Z_GQRlhWVHw)D`x7Tc} zAVO8U)Ws!j3}Y^_`$n18g4>7GKE~ye#E=MO#8p;~Hh#2lXuvqgACIsx9DYH^d3x;NW4U+9k2G8gK7P?fMul7V6^w5-8=~)t^5(DYFo6$0WA6Rb~oDYCK;RRn1 zoD$Y*BNYzEWP^`b^^kZ7;<}+2g=DNB6$O`T#(nDAG_HoL%j%kDPRpm^GsCwbws~iA z?lr8}{U|yl^3#cbKIrJqJWc&su&hyAVc3$UK-(zids)o|rjAZ^`z&sHWyA`Mt;nm* z5bBb`=uW#dgr*T5GZ#RTz&S^=vB+cLw}*Fm+~89sNwF9S3Zh*h<%sa|PG`y%nNcl9 zybaf>w|Fy}Q1EU+n1;Lzp6{v`)B9Jt5jDeh8B;z<^jIm;A==V6+poTZ=wbA4$UF^At zXCXopJ9JFBWnieZ;q9v^I9oaz-4$CL4qUm25*XlT7?fc-xuzKZ%yp`DB_^dV5-%^$ zwRkL`*Cmij=^F0~#ozha25G8zNdzo<{z44BO z>TmHVsD$)#F+?brPvcVRYpOXr@(@&Fy#85#LEvl4f_UF_8IesLKP?_o4`{3{Jwuj9^Jake!X z3_Pmua8gu2>A&&h3#O_4ma8#Rm5 zyrgX25vL_g&!DDdC%$E>>bbO*kp=t3D6W{-gF)uGAWQi_1Y^P^L3%^3j`z>a0)LyC z^umodPbE5lEMNw?=Q0XRiTA`Upm&<+uPT6|lYwf6Ik%qm($Gh_*Q#3AGp%$DNEMqI zq(URca*XM52c}&gPWXh#h~t)5pgS+K5N-*(fG2tb)Z`Hzu_+kxFkX4?BHA)%Vv%4W zD3#cX(B*h}=I%7owKs>9=roDZ(tW|@x1E`$5t ztZ}lwRc}+w@#Iwj+#hzu#=V=s`= zsnFN`@D0TGv0NAnW^^!RHis{X#DZb5M=A-&@Ca;@#30QRB8WqhYujCr5>eolQ(fXN z##U*FqP__;A!rX-cdDt~0N5OH>SNbJWN*`y{*+dKsFD)Ww<}{h0k?prl(6H#_S?ip zS(=3`%r$vT6D+M7_>Lk-=WlYDU3iptaLrK?B_fcHu~5eTOG&{JnihV(r?j$JHL<^= zBo!(k3Z;5OXhZJ88nL7qN?D`18E@a9|9A;x)Do#>?oRu;oGR`nwr~3FS7Z-7=xvQS zRn#W4uj))}FVtGqvFN>=V9nEE^o0Bd&B+Z8D6HLK^QSBfD)9}jCn{%E`wjt!E*BM| zyoWM0=?vA}7d_J3t=5DQu^n(7ED`ZYpIPcXuf81|L@C$7m9ga}K0&KHT|r&!PlFTC z!*OV61uaYDt=&5O!P@K#)7vROnBfIY@cDq#Re=Eh9@~weWsH>*o=K2%d!>x?=l0la zSerko99trm@UwQ{ky)8Kv?pr{i?L?t$x>s8!N&V8S?pA*Pp z50{XFOafH5_^Z)92rR|_E}f38T}28pbyCC6lE(9{;=zbo>;dXKNU**eumi>06g+Z4 zCck!-(S~<+la;y`~C1k)LEr+JuCpn&P$ht#X?yLcZ*-l2|`RzO+45pR^hfm z;{c}zLefd<7mDT`-A^e~3+fCXoY{$FP>cxxX5WyX2nA_KF)TO)oD5e2v>wDDpHY69 zLYQ?$W65m9BYtr`iV3^)k#^DQo0~<4%}`Is*Qsy0@k8z#7{N0<{E_%^a(RjLHxgov z6dVTz)U^u4xh@&iKuzzZ{%f{`XTZf~G~6fa(aPM4xq-fz508x^K1++NA!sjNA?=pG z<=Za-3XC~Dt~k9a!QeEq1=1*HY2fbY*@q54C_ACtaedGc_=bS>{0XSPzUsFoN~Fr8&EoN`UsoH=4b%d-s&_U30;sjM>KO z-JQd8=g})MVpR@mTs%7=WC36l;#h0(W&r(+d{xpWha2veil#|oyPIQJo3RKD+{x|H zZ+lSU6mmy?rN@!RhJepK2%H%dBnS;Kr#0d$jWle!$+*AzAl6(M83Bt;ubP`N-Eb)C z@PF`B@^3WmC+SVL#FWRtP#%#&LAJ_wOb{Gc++6$8+OfBS>^tgDq_rOjh`I zhIgOCNZ3_3EA3<Bixy z8JuNlhXjtYwv!us2EBbVMVn-#x=*7MLU_f5Nqr$|3eY5vsaB%Ro0C&wm5v~1C?2?# z35%=0b<5oe2FDH*3u$1BycqMqh}>9%=BGS8vbf7b<*Ax>TCue_7yIhlWRRm`{X`{V zK&q=n>lRjthQ7ZDi4jSgSIYI4?=AY~O#3&9$3hOc7xbAnm$#-wZ!3Bci+G*9=Qv}) zQlvIQE|0?-NDN2L6=S~3`?WvaH$9*P{*_!-rWk;WYER!CR_Z3?-Wi*@4=A^n9`@Jv zTJueYmsh=s3BXRYlA?Pedz~78rGl&< zRa9fuA~$}9)=1<7iXZtgtc1^F<|y!%ABmt{CIV@Ay;6^er;H#LVBTCP;7mZuHrZl+ z8Lxs1Q*Ow-%@l|lpsuSX78g{hoZqvYZJZt!!zUT-qY|(!sca6*{6uaDZvi=9xFnD= z3xjCAIu`t}*%&t+;FLiWwV#3 z2~yZDiE^D<3psx0l>Phq+JEPO7h0vHR5iIhL|eIy^-v}hYNnAjCJ_ZLhNZ_pGe8$0 zogk57C0+7IYW@3ENg!rsh%~v>^f_3^l<|b#gzoq%bGfzFVW~wzPxPOD)+lJ$D@9az4TIp^A;TtI&~+=>Tb4HCnRgacMvA$FZ@@-MqeB2mOZs!_3mbV13^BFDQiQWuj&9;S9sa$E@Klqsk6)( z@*Hm*QKF@dU}9m4y2e_57|H%qPe(4iR$Si_%CI8}atZ2B?z!ceg7P7Z%XFO@s?6tP z#T}Z%dMSzSTrBs^GP9Z|0&|s}DA!1WIvdY~a011GGbGd>Egor3x*sou+x_ywNf}3i zWf>zAHNfAS9e8pika%!Y;-MrJu;1Ut)@giLuq4~=rg(*P#YCtK>b7X3zrn!jb zB?xdm_Qb!HhYT(HCOo~Da@tAr7QI<4WE$%@SQJ#lH#7^3A6_0?xT4$wUo9Kl>KoC1 zyDNNZe*Zd@G2}CN&7C~nueIf~^d=+cg$dUj^jpfD5rYl3WNl_2MvOO|8WSut?e zd6%vy$9a}A!iM7R26YV;Tg-F&XU2yN#lzh5EME&iV#=(RYaPNr>$0dQWo9gi+KIx_k&4LZ_PFaFI;?_AE z1gr-QDyPscEm9-}&bE7YDwial)U}yHo+nJaphCiIBB;gv;`4pFN6d>AElz(83k(gt zkcmT$dl@UtvnwDpvK*qKH<(W3SpUn}UJ30({}{@cy+G z+OdeTh5)0Qfq%XDG5UCxR{lflAo{6JOY-zgdeQz~hNP!lYSa-|nJDNO`T@TFX8NyM zyrZUWs=J{jaAEv4J9%Pylv(67UK1}4QZLJ=> zL^2r9*h@U4dg(Vnx~|aTos*-Y^$e(nz!3hzA%LTTx(Kv*ZAQN(294akOM4SP1sc)( zbU0BrT_)+-Ri%4Yl~Bs%rW@(!Cd-2dOAfE;s~YyF#FVCe{gb36!)4yyDafVcnp7(flaa~Sdhb`3SC&OXOGy8+7xkW=iNhlpwa z$c>D1WA`9mmVetaz>+Rv7gx`#yrmQAhicFyKm!`)Hli40rwlwQA;eOeu=q;NBCTJz zsEHg&LZ*=WGeZlhsGNeG<_c<|T}3cN`{M7oe$Lp<)|a+mNMrBFjxG2fATZlUKhV@{ z!FG`wS@Ru6tAvr?+VL3UF|N>w$;080lMRWkeQe0n6yZ|PkiQbob9>Imx|xXiNMSBq?|4bW0&lwzUdQ; zUM2o<|MWZu^X8)Z3GH?gk^i`#;3E68(A_LI$By{f$YZYx`%u0>6-=58CfT&Z+zMk2 zIdxw|LQr~n1;n|0=C>H5%Ufe@D)XRwv{>T1peaR8^ixBMnEQy9K{JhZaCth;+d)zFenzcC;^D&S*69l!-|?G|s$D^fR@h!ov7pOK=KykCSvS z9B-O@T(o5xTnK2gv(7qw12(cMtk7I9J$Gn^UA}MRG@Lt9yBSq67q8&P_cUpI<(v+sOH%#QVMAiU08F%8H}Su@W}60u+Ibht$u&s9BJez;CgDEDQ6E9NMs%@#WV53@joEqp^`PqCmB)|}#0_KyC@J#7qoWSEuCMT}nHZn*U-X{NrS z$By&~{yP?^RF;MA+WZ;7&?cclfgK|60j6ND&x)b#F=X+cndc_3kQNJRKm>^TtyO2{ zIu#Nunr@JX$|FYMwcF%%K|XXxe4Bg3I6le0L#HS8vpD1IcWn`&8E(BM@J?#55|w_q zrrfU-xs<1py3JVuwJ>!&yuJ|Ab?Py6hNPVqCxe5uvAx2qy36r`tBkdRvSawKlf3p7 z7SmRtibe^{)e?XyHT-H$oYq1wX!JR;xK50dMr7_GaVPNiR^u{D-JSg3T;gp9E+(yN z*DB*$V;dfNS2RP3AP}lRJI$s*=IZ^jWfL1G4Af-R^<5?Nr~YBkig&aVd-Y`%>qB@0 z#&OT|Uznt(s=u@D0v3GC!rEDW8@ber;YiFCoR8&F8cRLv(e%JEIzR~xZs z1aCuFZd5dh3D9}kK zf-DB=dgzXwj=-h3X_wk*O4H5J(G&!t8%u#wu>~WWl^gcYKE& zwvq?~3DlhO9UGG&2H@-t5U*Fwkl8wuiA51d^W0=6O}tn+r6~>q!RN$SPl(HNawKk` zTX2Z8YtY*%3h6G|)$#3^e~=#~!4p0wp`1jTStlVwzLq+%p#@ld5{jFjudm!WawoE`>5Y+BLV`(*$FLjd5LcUVd$QWI%>5(s5wL!wYeD@0LayKbPas z&eK725Zo1gq^MKnAvGqD-}j}o`7&Wxi?Nv8Z#yG&*6z=shdz$930P>w@iI-)Vf-q$ z=a1kSk%`drR*gXew2auJf5Mn^YlMcEwkC&Z@b%VB5xKc}hC;AYOdG=_an?>!PIUJ! zYz?aB`&u56Fw~RT+|xo+h=FG$;UlV+3cw0%Ij2A3e}4i+pzfzGhF6UJX5l<8U?_T0 zP}k2y7t(3rlrx2%B~z8D_1Splc9 z)>72t6QCOt;hnW`te1%?crgp7LEsUV`AL~M3dgP|n4E%9m^>ag$86QIHS~GDoo~&R z^4H2)w%6pyQd-w0-7bhOwMZRxhx($rt~6)xXNJ7`X4&PR6{#TXGTwPs5)%YT2$ufG zc&tO&LVAz)AF2d`Y~MwAwM)mSaHb_!8YHoc;~xlf)SL1$!N2Jt*UQ{b_=uItIA8CE zVI+m5!1=N`3i+9~kFc&L*pxk)*4Sx7XbwwZW&WatoP{S1Ca5BE8J2Qi62~l$hve@< zrpzodY0_vR|2}A7=N$EPAO>firS-Kt;q@@-5_^W4UyY}m-E3ycQ{&ZB1$ zQB*Bv`EkH21gtm2DxGL1g+!aqTW*D}Z%^exHVhGpfPTZRLeYmmc4MQz=}L=?(WCdp$FfLegSJ=gLa zelE_QvrLF``VX{IVu#I5sUL}P`q)0D$;)fo9jwvo)btmLnHW*H->W=>2Y%RJLAd#! z<``FhTiH^*lJQV4R%NVA5_g2;xNNBzdK z*v@2?BZrLkC#|@fqUh4>o;7n3zu#H{SLX#=JRU6H=}qtjMm}j-s$MY!VtYDH>q#@T zYM%UkUcSt>f#!Ay4YInVSikRQ;crvA=aU({Sb|1k0YowBG}o>eY0r*cHcvGV#OYIzzXU^Wh6wAFQBaW9N~+#cS!nlH zT}+h)>gOu|5>CizQ6H^FRH4Fof$|M|W0@h135nDX_M=H7Vb5W3)*vWv1@qxCxV&D| z9U766`fFn*qMv>Pwc+TCTB{+_u9bHF?}B?8x51zx%X)!M)CyXbUALl<5D0LB5WjbF zBZ{jOAS3OT31L-=}a~v>g?F?v8jDh=S&f%|{@t?Jo zxS{^LOQ{H1N&XF}C~sZCZ}KahX(n=6tZ4}sQDH!C2`Wq3a<&V>kCDIH*r)K}O63o& zCAN2onkC@Q<=;x%2oXia6b@*HAL;pxHfb3Smpsa~x(AOl@6D<0{>+X(x^LFpil)x` z+@}?sdk`QXII1>uLCB_|vW6=PT}Ny!e#44(hq@Toem04Vxo+Tv5y=^=nW~ufRu#9~ z?WkT%KAPds+(+m$unW$)e_`}6Jvaf5n2!;4)->AN57~)(sH4|XP>_{K{*7xX^(983 zi92c>sVBZf@Xx-+AhETsO*Y_9-+jBx8yW_Wyz4c;sSh42Ib!rS!C=K*%flUTbK~>X zVhH3ODh2E7u4}v(sr=)Gxk2jxx5ofCc3`{CE@M8_>&J#Exymkr2`fj25+Z5u^o+tI zw8&|(dRWqG_&WmwjYGBzlQ}7e0npo^0!&>dVju2w%0wA+FQgf|*`58!V*EK81ugZm zf2@-m*)B%wQ~-^>|3)MSB+MG@P7 zr|hV(b%I&pq|Ya((LeeK5}j8+RDXe+EpGGPm>!NnuA28pab@V0$Z;W=w8jfi#XB@S z>GIdo@JnaEch1UrWsHv5F?fn?s!CvTZVRX;WSN&%scq}SZLxX?vIH-|%lv&UE_D_P z#goClWt`E>Bkp4Tvm`OFWtE5c1-B3X5 zSk%pVnmCYeRNcHe>^ayh3&?t7w*F51fW{zRl8@~Y)lmB~q~|q-N(o9B6*q<|HAzZ% zi%GyUi~d@bCC`sB{zBHfpN<#WK(m|$nPEVU9yH!GyX2(7i|Hyq0|us*3ZS{kf#+K+ zc}VJpRTeD^;nwc-XE1l5%=eree$8O>GvkqiL$nZN;>A_%OX>Zios-}yjF`=sYFDQ{ zs!SS@D4RwuIlW?RmudXR2%$kil;Qx*0CEChka6{-2V+kvlOybH05Ta($y{>Iis`ar zRa6Mv+^@nOw|RV&L(?lKsIdH)|4>Daq@q{Mqg zMZZCVI6Ou(-}$`{z_DX0zgLs-SPl__W7_XRI~;}ezH`apbb@JIYogYcNs>r@zj4fx zM*URe;NjAec?cPA-A-6#pW8Mk5yRjZB_~e8@9%Rq)$&{hRU?YgUI8P8YSaegxpEcRr ziac98weCeJ5zv0Whi^g)%m<6L7|T*$ku!mQNE698EHP2#deOhB8t*%r*GeMJl}uB( zMmqWPw~IHMzQdgmYStE0TO=Mhp57eW7M^G3)b#fZ{w}EUoM^o)z-}#B3I!y>Saa^Fzt!Bn6+QG8 z7fuhUOiN%|P{twe2(~GzJD~i4>GHUy)eniWxQBBc+8dBh_4nLPom#WVz3qL@Savt{ zLrd669rb)_H+I%x59-Op7Z@MDzlD0TEFjwWUK2g|Ljwo$Ohh&Zn;1Zu0gM< z#(sQRZT+3AkkmMMRRn^09Sf{|L(JI_XH8Z}HZ}gEZQ7XFrLCBV8XwCTK}A=SNLxNJ zct{N!fB=TB9RJ|uQ-NsrqQGG^Vp+V!gr}ZNiZCiVv`e1M zAfB)i*Gnql4fT3-${rvQ#$SNhUPinT7#mBbVzqgeP$Q(F!_>7D@H?M5H3BmC2@PJZ z*N6d94`T-!6(6-gjUOEG+OY#>s*Ibw#VF#eHHZy`IZfY5Yd4xb6CV{TozhCzObFN2 zgF}Sg!E zYZ@ak;GQT*FiKF_I_MpV*9yK#n%u%1v0UO&?BkB8>{qcp=wkQ4Re4yUM_V0!tKli9 zAi*;LrQc%%Oqa*FEp&%5@AEkw2NLIbBSs&4r!3n-SQ7HSx+xdE{BhJ6hPsI`wI$p! z(16&6^C8Utx9j>EW8$QZ;`9=-nF9Ua2u^)vOjnlObzb-+`~<64cd zFN(+jWZ>@;^`;%LmAZ_>F7P2`jL0sYwW}Bl$FyVYM0WHT8(X z>c*vnR1%2Ha47yxR0=bUT!z8YFw1ea~nX z^bw0iav?jJ{%-mb_=}@nQ9e7uf=qZo7;fqQ_}X;y*DWhRM?9we;FI)`R=nxaJ|7(bUOlP8UBvXdaAlPYeFUkGO-=^Wr84q>A7E7M;zqv8nS(iYm6Xn6;NzlUHSW9C zyW_#Rh;M4XI|Zo7bL-KtG-ZyjF!t;xg!mlpR@$tDGee+MMrSVWMQ2KoJbJ%|adtN- z+Kz@NEsYpXP1vA6oy+nQ_cRa@$Cz>V2mN=+7Bn$wG)}#=8_bGmn9rc;mtdGf1uH@; zY5PQKcToz}o)A~TE{xAWTU5OIa^>3GEB}_lQD#4fyGC5yLhA1pvZ}R9cPYx;L^qFx z&g*}J2x!-LOAlm{9&1f>)Brx&NGpA46(0#j%!0U~3Tq;s>fJVGb9>n5-}gid&rirq z`y(ODl8Xtq3~uhAn;~?L*|1!6k|x0cvmz;r zaNS)^C%ra874<6YpDOc}9BchBWE9gY_TE$X_e2i~smyYf8q_3k_6f?IoxLP6Z$628 zz~$_}3DXY|6vs47f?ULa$ZnY51zxnHZspaHulZof`~pZ*zWu-kFSB@N?ZGiVANL=F z^Td!>iHH-Ea{wQuZ3yY~j3FRYW_IXeqKQG}I7EGfUE(wAqUter_`rob9^zXQ`8s~N zM860d;Jg;ABkQ=CCaKPi4rzpJ4y-Hfap??(c^y78dXAop3~vIwKr;i&c`Ea}%E^~o zMAmUA>Lh{+%iQLMA4|}POBT&VLtz*PjkNpiZ6_K;Zt$OjS=s-xxQTPiUskZ=-*`lz zw{Z}a=>*%bbH-$?9UQR!b-a)C8Xrb!HyxVn$Sr{RKFbY(@9qgb#@0Dz9Gxt0-|}?# z%t@K1Ly{39#EH%F2^x1)AHZel2U)Ok8yZ8k1s3afXU<&9D3$eA?dv~4^hHj=`$WH$ zmTE#ogPcm2i=4opW^PyJ<3H3J4NGmGk_7KuR4021G?g{*;zE+7DF<;d$O1i*=({CQ z94~T_Rp!W9W`D~$dogL?cCteHEi3*qp1`U&>RVkC=lQA~9RttLl{pvRUwu|hNlcs`AzPD7 zJg@w-J;|9ULSL*DvnK?C8osqoCS2DC#Vb_15pd)`>%o+{Q_N(1csR?$|a% zMdjYoC6q33R!UTrQ#8b`G7Xm#=g)~xnKF%XM$D+naR{B>BH_+OBD4M`>Y<;yIs(F? zzo}<0%NJhXId@}M)V~02&HHmVi)gz8w%>p8fyk9oD_sub**gn`fEpxTw@Elp7qLro(OmGbJ^l7blSn3FZWw+boa zetqa*xa#(N$M1(SIo423E(iYH4bwi8qw7N*F3Lmq;HhW3(d?O6ytGMHRfcIgq4EN$ zpCJ%~qMNIzhYh0n?x7h$icWb&e>moIp&j_(bjioEfZQ-_k&89DMz?fK_BLet%mWV# z#PQa;%+yRLFqm-j6eOISAUlKB)O?Zqh{j+uI~XE{_GvR@{3PfW+L z$KK({ril5i9B=KysGRY$%T}JQEr#xTl%d4PgYz-`9Q@=NY_Ah*>lf!y3UegI z83)``5cA94tn)AsF@l3$NYG|tZ*Ojj&W~3c&}5z({t@R=PQ!*07XU(ZEA|{$+Z5WU z?z0=E39wS{pD6if`Ve%^9*Tbm@Z=AoOZ5y~V;zNCpD9%DROKwS{DI&g&^EG0ehxEk z@3#kNOtBF~$$1T*e7m(85q@yK*_}d)pT?-`h$EK%KW@oS{ODUag5AHafw1IO#l6GCfjTyX~nvc5j1w^Eebhw zZb+-FB4YYSh`RCu@|}h_lM{MOHA`_wOJBcJdW(R4jT`-BgL=|^$SPq4{6XBpU4Y>* zL0`c33$_a;UQK8*tVZ zZ#>5Q;mjS({)@@>>(@UVxc?B}{`37s zeapto#>4Z^KmHlB{)Z#?U#z%5FE>e5w=YIq06+gfz*l23X8sxgn8ZW?EC41`{ZSO4|-FFhRp(F0&o^L8=^Few>Zn*U3ulCg`qgWH!F^M6tA%A0@jk%>Bb0d&70 zW&j5VDCKYp6M|T%fb63DW*--gk zQT^lde=`XGPgJh|a!uCS%=IgRe*#zekGJms1p2=eaQ-g^VqeU{ZjLShYExrt7e@dK zBMUPlD}dU{&CQ9I=_|2cprwnkla;lpE2E=}B@NBL%qY1ynz@^PF%|#+7yF;8aQ!dy z|Mp+Z*v;6^(emG_zbfSVUv>E(87~)e3pi!~HyrbS8i137gN*}V0r)q@#>~z9m6?AU zz~Mg_2g_F~{x9rn@c+WtnAv&$KV-STJpI39zie=RCGY=%@$h`jga5|dT#T*l%w7IP z@2qO=WB%pxKhssk(a{a?PvHNaF47Jbj(~s4@UObMx*5B;{VPH?7H0M@qG$@Bq6FOk E0Y45+F8}}l literal 0 HcmV?d00001 diff --git a/statistics/exercises/bootstrapmean.m b/bootstrap/exercises/bootstrapmean.m similarity index 100% rename from statistics/exercises/bootstrapmean.m rename to bootstrap/exercises/bootstrapmean.m diff --git a/statistics/exercises/bootstraptymus-datahist.pdf b/bootstrap/exercises/bootstraptymus-datahist.pdf similarity index 100% rename from statistics/exercises/bootstraptymus-datahist.pdf rename to bootstrap/exercises/bootstraptymus-datahist.pdf diff --git a/statistics/exercises/bootstraptymus-meanhist.pdf b/bootstrap/exercises/bootstraptymus-meanhist.pdf similarity index 100% rename from statistics/exercises/bootstraptymus-meanhist.pdf rename to bootstrap/exercises/bootstraptymus-meanhist.pdf diff --git a/statistics/exercises/bootstraptymus-samples.pdf b/bootstrap/exercises/bootstraptymus-samples.pdf similarity index 100% rename from statistics/exercises/bootstraptymus-samples.pdf rename to bootstrap/exercises/bootstraptymus-samples.pdf diff --git a/statistics/exercises/bootstraptymus.m b/bootstrap/exercises/bootstraptymus.m similarity index 100% rename from statistics/exercises/bootstraptymus.m rename to bootstrap/exercises/bootstraptymus.m diff --git a/statistics/exercises/correlationsignificance.m b/bootstrap/exercises/correlationsignificance.m similarity index 100% rename from statistics/exercises/correlationsignificance.m rename to bootstrap/exercises/correlationsignificance.m diff --git a/statistics/exercises/correlationsignificance.pdf b/bootstrap/exercises/correlationsignificance.pdf similarity index 100% rename from statistics/exercises/correlationsignificance.pdf rename to bootstrap/exercises/correlationsignificance.pdf diff --git a/statistics/exercises/statistics03.tex b/bootstrap/exercises/exercises01.tex similarity index 100% rename from statistics/exercises/statistics03.tex rename to bootstrap/exercises/exercises01.tex diff --git a/bootstrap/exercises/instructions.tex b/bootstrap/exercises/instructions.tex new file mode 100644 index 0000000..12e9e24 --- /dev/null +++ b/bootstrap/exercises/instructions.tex @@ -0,0 +1,41 @@ +\vspace*{-6.5ex} +\begin{center} +\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] +{\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} \\ +\end{center} + +\ifprintanswers% +\else + +% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und +% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost +% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) +% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen +% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig +% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: +% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden +% (z.B. variablen\_datentypen\_mueller.m). + +\begin{itemize} +\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass + sie auch wirklich das macht, was sie machen soll! Teste dies mit + kleinen Beispielen direkt in der Kommandozeile. +\item Versuche die L\"osungen der Aufgaben m\"oglichst in + sinnvolle kleine Funktionen herunterzubrechen. + Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, + lohnt es sich eine Funktion daraus zu schreiben! +\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen + zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner + Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft + ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute + Statistik zu bekommen. +\item Benutze die Hilfsfunktion von \code{matlab} (\code{help + commando} oder \code{doc commando}) und das Internet, um + herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden + sind und was f\"ur M\"oglichkeiten sie bieten. + Auch zu inhaltlichen Konzepten bietet das Internet oft viele + Antworten! +\end{itemize} + +\fi diff --git a/bootstrap/exercises/savefigpdf.m b/bootstrap/exercises/savefigpdf.m new file mode 100644 index 0000000..fbe2dc2 --- /dev/null +++ b/bootstrap/exercises/savefigpdf.m @@ -0,0 +1,28 @@ +function savefigpdf( fig, name, width, height ) +% Saves figure fig in pdf file name.pdf with appropriately set page size +% and fonts + +% default width: +if nargin < 3 + width = 11.7; +end +% default height: +if nargin < 4 + height = 9.0; +end + +% paper: +set( fig, 'PaperUnits', 'centimeters' ); +set( fig, 'PaperSize', [width height] ); +set( fig, 'PaperPosition', [0.0 0.0 width height] ); +set( fig, 'Color', 'white') + +% font: +set( findall( fig, 'type', 'axes' ), 'FontSize', 12 ) +set( findall( fig, 'type', 'text' ), 'FontSize', 12 ) + +% save: +saveas( fig, name, 'pdf' ) + +end + diff --git a/statistics/exercises/tdistribution-n03.pdf b/bootstrap/exercises/tdistribution-n03.pdf similarity index 100% rename from statistics/exercises/tdistribution-n03.pdf rename to bootstrap/exercises/tdistribution-n03.pdf diff --git a/statistics/exercises/tdistribution-n05.pdf b/bootstrap/exercises/tdistribution-n05.pdf similarity index 100% rename from statistics/exercises/tdistribution-n05.pdf rename to bootstrap/exercises/tdistribution-n05.pdf diff --git a/statistics/exercises/tdistribution-n10.pdf b/bootstrap/exercises/tdistribution-n10.pdf similarity index 100% rename from statistics/exercises/tdistribution-n10.pdf rename to bootstrap/exercises/tdistribution-n10.pdf diff --git a/statistics/exercises/tdistribution-n50.pdf b/bootstrap/exercises/tdistribution-n50.pdf similarity index 100% rename from statistics/exercises/tdistribution-n50.pdf rename to bootstrap/exercises/tdistribution-n50.pdf diff --git a/statistics/exercises/tdistribution.m b/bootstrap/exercises/tdistribution.m similarity index 100% rename from statistics/exercises/tdistribution.m rename to bootstrap/exercises/tdistribution.m diff --git a/statistics/exercises/thymusglandweights.dat b/bootstrap/exercises/thymusglandweights.dat similarity index 100% rename from statistics/exercises/thymusglandweights.dat rename to bootstrap/exercises/thymusglandweights.dat diff --git a/likelihood/exercises/Makefile b/likelihood/exercises/Makefile new file mode 100644 index 0000000..27691d9 --- /dev/null +++ b/likelihood/exercises/Makefile @@ -0,0 +1,34 @@ +TEXFILES=$(wildcard exercises??.tex) +EXERCISES=$(TEXFILES:.tex=.pdf) +SOLUTIONS=$(EXERCISES:exercises%=solutions%) + +.PHONY: pdf exercises solutions watch watchexercises watchsolutions clean + +pdf : $(SOLUTIONS) $(EXERCISES) + +exercises : $(EXERCISES) + +solutions : $(SOLUTIONS) + +$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex + { echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@) + pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true + rm $(patsubst %.pdf,%,$@).[!p]* + +$(EXERCISES) : %.pdf : %.tex instructions.tex + pdflatex -interaction=scrollmode $< | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $< || true + +watch : + while true; do ! make -q pdf && make pdf; sleep 0.5; done + +watchexercises : + while true; do ! make -q exercises && make exercises; sleep 0.5; done + +watchsolutions : + while true; do ! make -q solutions && make solutions; sleep 0.5; done + +clean : + rm -f *~ *.aux *.log *.out + +cleanup : clean + rm -f $(SOLUTIONS) $(EXERCISES) diff --git a/likelihood/exercises/UT_WBMW_Black_RGB.pdf b/likelihood/exercises/UT_WBMW_Black_RGB.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9aed92162b1d4345d994cfd0b8d70be762fbec97 GIT binary patch literal 31288 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 E0Y45+F8}}l literal 0 HcmV?d00001 diff --git a/statistics/exercises/statistics04.tex b/likelihood/exercises/exercises01.tex similarity index 100% rename from statistics/exercises/statistics04.tex rename to likelihood/exercises/exercises01.tex diff --git a/likelihood/exercises/instructions.tex b/likelihood/exercises/instructions.tex new file mode 100644 index 0000000..12e9e24 --- /dev/null +++ b/likelihood/exercises/instructions.tex @@ -0,0 +1,41 @@ +\vspace*{-6.5ex} +\begin{center} +\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex] +{\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} \\ +\end{center} + +\ifprintanswers% +\else + +% Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und +% Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost +% werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files) +% im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen +% ``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig +% voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster: +% ``variablen\_datentypen\_\{nachname\}.m'' benannt werden +% (z.B. variablen\_datentypen\_mueller.m). + +\begin{itemize} +\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass + sie auch wirklich das macht, was sie machen soll! Teste dies mit + kleinen Beispielen direkt in der Kommandozeile. +\item Versuche die L\"osungen der Aufgaben m\"oglichst in + sinnvolle kleine Funktionen herunterzubrechen. + Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, + lohnt es sich eine Funktion daraus zu schreiben! +\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen + zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner + Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft + ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute + Statistik zu bekommen. +\item Benutze die Hilfsfunktion von \code{matlab} (\code{help + commando} oder \code{doc commando}) und das Internet, um + herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden + sind und was f\"ur M\"oglichkeiten sie bieten. + Auch zu inhaltlichen Konzepten bietet das Internet oft viele + Antworten! +\end{itemize} + +\fi diff --git a/statistics/exercises/mlepdffit.m b/likelihood/exercises/mlepdffit.m similarity index 100% rename from statistics/exercises/mlepdffit.m rename to likelihood/exercises/mlepdffit.m diff --git a/statistics/exercises/mlepdffit.pdf b/likelihood/exercises/mlepdffit.pdf similarity index 100% rename from statistics/exercises/mlepdffit.pdf rename to likelihood/exercises/mlepdffit.pdf diff --git a/statistics/exercises/mlepropfit.m b/likelihood/exercises/mlepropfit.m similarity index 100% rename from statistics/exercises/mlepropfit.m rename to likelihood/exercises/mlepropfit.m diff --git a/statistics/exercises/mlepropfit.pdf b/likelihood/exercises/mlepropfit.pdf similarity index 100% rename from statistics/exercises/mlepropfit.pdf rename to likelihood/exercises/mlepropfit.pdf diff --git a/statistics/exercises/mleslope.m b/likelihood/exercises/mleslope.m similarity index 100% rename from statistics/exercises/mleslope.m rename to likelihood/exercises/mleslope.m diff --git a/statistics/exercises/mlestd.m b/likelihood/exercises/mlestd.m similarity index 100% rename from statistics/exercises/mlestd.m rename to likelihood/exercises/mlestd.m diff --git a/statistics/exercises/mlestd.pdf b/likelihood/exercises/mlestd.pdf similarity index 100% rename from statistics/exercises/mlestd.pdf rename to likelihood/exercises/mlestd.pdf diff --git a/likelihood/exercises/savefigpdf.m b/likelihood/exercises/savefigpdf.m new file mode 100644 index 0000000..fbe2dc2 --- /dev/null +++ b/likelihood/exercises/savefigpdf.m @@ -0,0 +1,28 @@ +function savefigpdf( fig, name, width, height ) +% Saves figure fig in pdf file name.pdf with appropriately set page size +% and fonts + +% default width: +if nargin < 3 + width = 11.7; +end +% default height: +if nargin < 4 + height = 9.0; +end + +% paper: +set( fig, 'PaperUnits', 'centimeters' ); +set( fig, 'PaperSize', [width height] ); +set( fig, 'PaperPosition', [0.0 0.0 width height] ); +set( fig, 'Color', 'white') + +% font: +set( findall( fig, 'type', 'axes' ), 'FontSize', 12 ) +set( findall( fig, 'type', 'text' ), 'FontSize', 12 ) + +% save: +saveas( fig, name, 'pdf' ) + +end + diff --git a/likelihood/lecture/likelihood-chapter.tex b/likelihood/lecture/likelihood-chapter.tex index 2bcc35b..38d02d4 100644 --- a/likelihood/lecture/likelihood-chapter.tex +++ b/likelihood/lecture/likelihood-chapter.tex @@ -18,6 +18,11 @@ \section{TODO} \begin{itemize} +\item Fitting psychometric functions: + Variable $x_i$, responses $r_i$ either 0 or 1. + $p(x_i, \theta)$ is Weibull or Boltzmann function. + Likelihood is $L = \prod p(x_i, \theta)^{r_i} (1-p(x_i, \theta))^{1-r_i}$. + Use fminsearch for fitting. \item GLM model fitting? \end{itemize} diff --git a/statistics/exercises/Makefile b/statistics/exercises/Makefile index 925485d..27691d9 100644 --- a/statistics/exercises/Makefile +++ b/statistics/exercises/Makefile @@ -1,6 +1,6 @@ -TEXFILES=$(wildcard statistics??.tex) +TEXFILES=$(wildcard exercises??.tex) EXERCISES=$(TEXFILES:.tex=.pdf) -SOLUTIONS=$(EXERCISES:statistics%=solutions%) +SOLUTIONS=$(EXERCISES:exercises%=solutions%) .PHONY: pdf exercises solutions watch watchexercises watchsolutions clean @@ -10,7 +10,7 @@ exercises : $(EXERCISES) solutions : $(SOLUTIONS) -$(SOLUTIONS) : solutions%.pdf : statistics%.tex instructions.tex +$(SOLUTIONS) : solutions%.pdf : exercises%.tex instructions.tex { echo "\\documentclass[answers,12pt,a4paper,pdftex]{exam}"; sed -e '1d' $<; } > $(patsubst %.pdf,%.tex,$@) pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) | tee /dev/stderr | fgrep -q "Rerun to get cross-references right" && pdflatex -interaction=scrollmode $(patsubst %.pdf,%.tex,$@) || true rm $(patsubst %.pdf,%,$@).[!p]* diff --git a/statistics/exercises/statistics01.tex b/statistics/exercises/exercises01.tex similarity index 100% rename from statistics/exercises/statistics01.tex rename to statistics/exercises/exercises01.tex diff --git a/statistics/exercises/statistics02.tex b/statistics/exercises/exercises02.tex similarity index 100% rename from statistics/exercises/statistics02.tex rename to statistics/exercises/exercises02.tex From 1e0320ff8e4dbda363641a822aefafc41c46bdad Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sat, 19 Nov 2016 12:04:08 +0100 Subject: [PATCH 06/16] 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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% From 16a956705811d1f1140d12fcfc9dd408c14c6627 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Sat, 19 Nov 2016 12:21:09 +0100 Subject: [PATCH 07/16] updated exercises for statistics --- statistics/exercises/exercises01.tex | 2 +- statistics/exercises/exercises02.tex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/statistics/exercises/exercises01.tex b/statistics/exercises/exercises01.tex index 767142c..558b14c 100644 --- a/statistics/exercises/exercises01.tex +++ b/statistics/exercises/exercises01.tex @@ -15,7 +15,7 @@ \else \newcommand{\stitle}{} \fi -\header{{\bfseries\large \"Ubung 1\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 19. Oktober, 2015}} +\header{{\bfseries\large \"Ubung 6\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 22. November, 2016}} \firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} diff --git a/statistics/exercises/exercises02.tex b/statistics/exercises/exercises02.tex index f2acd45..3419115 100644 --- a/statistics/exercises/exercises02.tex +++ b/statistics/exercises/exercises02.tex @@ -15,7 +15,7 @@ \else \newcommand{\stitle}{} \fi -\header{{\bfseries\large \"Ubung 2\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 20. Oktober, 2015}} +\header{{\bfseries\large \"Ubung 6X\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 22. November, 2016}} \firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} From 86ba1bc0fe7a0c921f5db41b57522cd6d174299c Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 22 Nov 2016 09:26:50 +0100 Subject: [PATCH 08/16] fakultaet is factorial! --- programming/exercises/faculty.m | 8 -------- programming/exercises/facultyscripta.m | 6 ------ programming/exercises/facultyscriptb.m | 1 - programming/exercises/facultyscriptc.m | 3 --- programming/exercises/myfactorial.m | 7 +++++++ programming/exercises/plotsine.m | 4 ++-- programming/exercises/plotsineb.m | 2 +- programming/exercises/plotsinec.m | 2 +- programming/exercises/plotsined.m | 2 +- programming/exercises/printfaculty.m | 8 -------- programming/exercises/randomwalkthresh.m | 7 +++---- programming/exercises/scripts_functions.tex | 10 +++++----- programming/exercises/sinewave.m | 4 ++-- 13 files changed, 22 insertions(+), 42 deletions(-) delete mode 100644 programming/exercises/faculty.m delete mode 100644 programming/exercises/facultyscripta.m delete mode 100644 programming/exercises/facultyscriptb.m delete mode 100644 programming/exercises/facultyscriptc.m create mode 100644 programming/exercises/myfactorial.m delete mode 100644 programming/exercises/printfaculty.m diff --git a/programming/exercises/faculty.m b/programming/exercises/faculty.m deleted file mode 100644 index 41992ac..0000000 --- a/programming/exercises/faculty.m +++ /dev/null @@ -1,8 +0,0 @@ -function x = faculty(n) -% return the faculty of n -x = 1; -for i = 1:n - x = x * i; -end -% x = prod(1:n) % this is a one line alternative to the for loop! -end \ No newline at end of file diff --git a/programming/exercises/facultyscripta.m b/programming/exercises/facultyscripta.m deleted file mode 100644 index be0ed55..0000000 --- a/programming/exercises/facultyscripta.m +++ /dev/null @@ -1,6 +0,0 @@ -n = 5; -x = 1; -for i = 1:n - x = x * i; -end -fprintf('Faculty of %i is: %i\n', n, x) diff --git a/programming/exercises/facultyscriptb.m b/programming/exercises/facultyscriptb.m deleted file mode 100644 index 8488431..0000000 --- a/programming/exercises/facultyscriptb.m +++ /dev/null @@ -1 +0,0 @@ -printfaculty(5); diff --git a/programming/exercises/facultyscriptc.m b/programming/exercises/facultyscriptc.m deleted file mode 100644 index 0804287..0000000 --- a/programming/exercises/facultyscriptc.m +++ /dev/null @@ -1,3 +0,0 @@ -n = 5 -a = faculty(n); -fprintf('Faculty of %i is: %i\n', n, x) diff --git a/programming/exercises/myfactorial.m b/programming/exercises/myfactorial.m new file mode 100644 index 0000000..2c5668c --- /dev/null +++ b/programming/exercises/myfactorial.m @@ -0,0 +1,7 @@ +function x = mufactorial(n) +% return the factorial of n +x = 1; +for i = 1:n + x = x * i; +end +end diff --git a/programming/exercises/plotsine.m b/programming/exercises/plotsine.m index 18f562e..8828b17 100644 --- a/programming/exercises/plotsine.m +++ b/programming/exercises/plotsine.m @@ -1,9 +1,9 @@ -function plotsine(freq, ampl, duration, step) +function plotsine(freq, ampl, duration) % plot a sine wave % 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 +step = 0.01/freq; time = 0:step:duration; sine = ampl*sin(2*pi*freq*time); if duration <= 1.0 diff --git a/programming/exercises/plotsineb.m b/programming/exercises/plotsineb.m index b7cb2b8..48690d4 100644 --- a/programming/exercises/plotsineb.m +++ b/programming/exercises/plotsineb.m @@ -1 +1 @@ -plotsine(5.0, 2.0, 1.5, 0.001) +plotsine(5.0, 2.0, 1.5) diff --git a/programming/exercises/plotsinec.m b/programming/exercises/plotsinec.m index 6e4bd8c..2b077a7 100644 --- a/programming/exercises/plotsinec.m +++ b/programming/exercises/plotsinec.m @@ -1,6 +1,6 @@ freq = 5.0; ampl = 2.0; -[time, sine] = sinewave(freq, ampl, 1.5, 0.001); +[time, sine] = sinewave(freq, ampl, 1.5); if duration <= 1.0 plot(1000.0*time, sine); diff --git a/programming/exercises/plotsined.m b/programming/exercises/plotsined.m index d6bf5d8..42cf19d 100644 --- a/programming/exercises/plotsined.m +++ b/programming/exercises/plotsined.m @@ -1,4 +1,4 @@ freq = 5.0; ampl = 2.0; -[time, sine] = sinewave(freq, ampl, 1.5, 0.001); +[time, sine] = sinewave(freq, ampl, 1.5); plotsinewave(time, sine); diff --git a/programming/exercises/printfaculty.m b/programming/exercises/printfaculty.m deleted file mode 100644 index bb3fa1f..0000000 --- a/programming/exercises/printfaculty.m +++ /dev/null @@ -1,8 +0,0 @@ -function printfaculty(n) -% compute the faculty of n and print it -x = 1; -for i = 1:n - x = x * i; -end -fprintf('Faculty of %i is: %i\n', n, x) -end \ No newline at end of file diff --git a/programming/exercises/randomwalkthresh.m b/programming/exercises/randomwalkthresh.m index 15af9e5..731c425 100644 --- a/programming/exercises/randomwalkthresh.m +++ b/programming/exercises/randomwalkthresh.m @@ -9,17 +9,16 @@ function positions = randomwalkthresh(p, thresh) % positions: vector with positions of the random walker positions = [0.0]; +% positions = 0.0; +% positions = zeros(1, 1); i = 2; -while true +while abs(positions(i-1)) < thresh 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 22975d3..1167437 100644 --- a/programming/exercises/scripts_functions.tex +++ b/programming/exercises/scripts_functions.tex @@ -73,20 +73,20 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \part Version 1: berechnet die Fakult\"at von 5 und gib das Resultat auf dem Bildschirm aus. \begin{solution} - \lstinputlisting{facultyscripta.m} + \lstinputlisting{factorialscripta.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} + \lstinputlisting{printfactorial.m} + \lstinputlisting{factorialscriptb.m} \end{solution} \part Version 3: Wie 2 aber mit R\"uckgabe des berechneten Wertes. \begin{solution} - \lstinputlisting{faculty.m} - \lstinputlisting{facultyscriptc.m} + \lstinputlisting{myfactorial.m} + \lstinputlisting{factorialscriptc.m} \end{solution} \end{parts} diff --git a/programming/exercises/sinewave.m b/programming/exercises/sinewave.m index 42f9362..5e446b9 100644 --- a/programming/exercises/sinewave.m +++ b/programming/exercises/sinewave.m @@ -1,12 +1,12 @@ -function [time, sine] = sinewave(freq, ampl, duration, step) +function [time, sine] = sinewave(freq, ampl, duration) % 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 +step = 0.01/freq; time = 0:step:duration; sine = ampl*sin(2*pi*freq*time); end From 8af349e9cbf86563e3a7901acf663714772a052f Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 22 Nov 2016 14:40:16 +0100 Subject: [PATCH 09/16] modified statistic exercises --- statistics/exercises/die1.m | 39 +++---- statistics/exercises/die1.pdf | Bin 3853 -> 3936 bytes statistics/exercises/die2.m | 14 +-- statistics/exercises/diehist.m | 27 ++--- statistics/exercises/exercises01.tex | 144 ++++++++++++++++---------- statistics/exercises/exercises02.tex | 42 ++++++++ statistics/exercises/instructions.tex | 35 ------- statistics/exercises/normhist.m | 58 +++++++++++ statistics/exercises/normhist.pdf | Bin 0 -> 8280 bytes statistics/exercises/normprobs.m | 20 ---- statistics/exercises/normprobs.pdf | Bin 3488 -> 0 bytes statistics/exercises/rollthedie.m | 7 +- 12 files changed, 238 insertions(+), 148 deletions(-) create mode 100644 statistics/exercises/normhist.m create mode 100644 statistics/exercises/normhist.pdf delete mode 100644 statistics/exercises/normprobs.pdf diff --git a/statistics/exercises/die1.m b/statistics/exercises/die1.m index 32ddad4..3c6b60e 100644 --- a/statistics/exercises/die1.m +++ b/statistics/exercises/die1.m @@ -1,39 +1,40 @@ n = 10000; %% (a) simulate n times rolling a die: -x = rollthedie( n ); +maxeyes = 8; +x = rollthedie(n, maxeyes); -%% (b) probability P(3): -P3 = sum(x == 3)/length(x); -fprintf( 'P(3)=%.3f, expected is %.3f\n', P3, 1/6 ); +%% (b) probability P(5): +P5 = sum(x == 5)/length(x); +fprintf('P(5)=%.3f, expected is %.3f\n', P5, 1/maxeyes); -for i =1:6 +for i =1:maxeyes P = sum(x == i)/length(x); - fprintf( 'P(%d)=%.3f, expected is %.3f\n', i, P, 1/6 ); + fprintf('P(%d)=%.3f, expected is %.3f\n', i, P, 1/maxeyes); end %% (c) P(i) -P = zeros(1, 6); -for i =1:6 +P = zeros(1, maxeyes); +for i =1:maxeyes P(i) = sum(x == i)/length(x); end -subplot( 1, 2, 1 ) -plot( [0 7], [1/6 1/6], 'r', 'linewidth', 3 ) +subplot(1, 2, 1) +plot([0 maxeyes+1], [1/maxeyes 1/maxeyes], 'r', 'linewidth', 3) hold on -bar( P ); +bar(P); hold off -set(gca, 'XTick', 1:6 ); -xlim( [ 0 7 ] ); +set(gca, 'XTick', 1:maxeyes); +xlim([0 maxeyes+1]); xlabel('Eyes'); ylabel('Probability'); %% (d) histogram of x -subplot( 1, 2, 2 ); -diehist( x ); +subplot(1, 2, 2); +diehist(x); %% (e) loaded die % eye 1 to 5 have P=1/8, eye 6 has P = 3/8 ! -x = randi( 8, 1, n ); % random numbers from 1 to 8 -x(x>6) = 6; % set numbers 7 and 8 to 6 -diehist( x ); -savefigpdf(gcf, 'die1.pdf', 12, 5) \ No newline at end of file +x = randi(8, 1, n); % random numbers from 1 to 8 +x(x>6) = 6; % set numbers 7 and 8 to 6 +diehist(x); +savefigpdf(gcf, 'die1.pdf', 12, 5) diff --git a/statistics/exercises/die1.pdf b/statistics/exercises/die1.pdf index bc4ed165253526afcac0cb2ed18b301112165f45..375f3cbbf392aa368b5947d90e1b329def3f226c 100644 GIT binary patch delta 1964 zcma)&c~nye7RE6wk|@Yv4agEACJ_)MFL_B`Bm)w{WR06llT zEH{{wIbgB=`0&j3_X++b^l-$fXR^|x^~!U-qlfw=`ywVQ6|&N$c|swQB zNBC|7;(1{U$CFq(XA36>q&W=Ls+JV|<|*}a!Hu6Av`&h9QQOF6V|E9+Wc{xj)x_?@ z)kfv8p3v;{)1sY`^}m*=8Ybr)xJC5COE3@9VD_0l6_;@&x!~#t!={7dURcB1VZ=o6{o!@93*+>kcB;IyB^xcDKUfS@h*_me}9f^01FZ-r$J!bF) zr))jWH|5Y3yURBs6$J*eS=syc2H~midVV3QAY%qxrV1`|DCHp3UI~F@p*i z`I2&h9jlgg>4fvcEZ-1v#ZPhi-aEpzwz+xW9l11hWRAI&hWeSc+7HrnwjjgtT@?d* z*1J(YNL@b@Y_}dY6&IZ+s!rMZFHUSqJ&g-MImW;T5@#c(2>$V1HY1HUb9QKfPxZe; zulZ7)?~!zB^9ekXV?#O(gSBXlrwck=mhOf!l1{5UzjA@~C55PMeh z&aRUPtAX#&KC!TN&kf7w6n96QMWA}3Td_)cugwLwxcBEDAKx=%?uyn#_}pWBtr=f4 ze#`BL%*7BK96gA(!u@RN9ZBhH866p%o6?h1P9^q4mfV{TYCZ?+%f%5b0j@NJR#F=xVEQ%XlM)u3x-QNG0 z#^+Ew;OirL(xlxDc(W+TIq3_@U&hRnXCJJ4m;J8BD2~^1&Dw6Gk1pCkG1nbt_5u}ACvo*LI&XK;>EK7i zKG||;X1lrvzRQL4hzTz+c|MBGi1bc@@v?*Qz2D~8!d3hYFCrK82&HiJwe;2?5db*N z*ZAk&PER{Op{kp>PPzOguBl+t@WR}j4KH4$nwU0#?H3P3Npq_{Cx4n+beL*jBz^qs zdK1e`%|JB~)It#|lUpAu`HA>Pi(M~oI+q#b`Yq-)85Ig9P97~Dig6gPJX1CK!%nVa z!gx~f=xAagJ6n<ut%Gc1~}u-Fd5&-tW5QvEagx@{0GB8~X!u8O8e0jl1;{)(7s} zAQ|uke$rm!Eo#jYyZp)*{JF<+Yo1$VFT7b_tr+L&Np*LJEtT_l{e z3^RUcQl81r32U-;t=0K@=n_wz%BZ@?$Gq@_iC$G9gL{M@I#$6!2bxvE-~ZEpM1ETOQ3rlP#L-NO$B zOaz-26TN7T+w-H?v%>!NZ3~~;FleW5OyS77{V(h`PJC+bTO6F;7{6(_PPRtV7(u62 zU^LO{I0}gd5-A}fn@~tdwgCV!U_)FU8v%(-q|@m%03?F40PX12fl6(A4eD}>%ob_* z&x4ITvbyLPlDRt23x!=BC_|mVi6KZx7lI+dVhV{842FaVg9Stq7z{yTTBwjLCIM7Y z1+RS@$bQkm!(<3p;ZdQL9kl1VaDjVx@wE;h|C# zgMqc(dr)>x7smyi0T&v;0$5}w2sly5OcLM%fpjX94nPo@%Cu+vUxJIWw@1aq3Z$_K S(oivqOaaL#Jl@&M1@$|%Hy+*q delta 1921 zcma)3eKeGL6fRqqw?QlEG>b-zsAlGU-+AW)V`9dn$XaLfwQ8psGm}ANOhsZ)Q6g&k z*t9-Q$*Hm0#7bFW*T%BUG8R)LV?KP9Ei9^G*?;z&ZO>WvoO^!vJkN8Vd+zivB zmUQk?N%Yjx)q>0OU4@&fMtY7V*Da8hbB~R+gx3QTQkHAv>2vuH-fu*PSz~h?gBq=0 zqTgA`+OSO}isJOBu&Fz(kFC`^YTe_|ZzQ$!`Re&NW&VR!S-D%xQPT!|x~|^lclgd+ z^6_sl1pPkAiC*nMd+c1##=~?;UdyMc%4^uz>Zyf<>&a;p9YOJIQcNiuw$yb$QA9N` z=~|B2fQHry|OONiX5Zr;B9553vi@F*u4hk`yKSMQH>xep z4Y+-;vDQ8urFbDznI1sj$NEki=V>3N8n&r4ox$l4+H%X4^eE#mk_<``qEk9-+nM<6 zNTgq=cvI3_$Sb5DuD_)*!LL*uZ4v`RtJbBAuJ{)BaU~`fYfHVsZ7%Zh0ObQe8jMWw zvslXWyZ{YoVSeA<*lVx(Mv2(z>|GyKKewpdJ;R_y^D^l3=8KM2{{Fn*j+`^t`s!|V z?bcn79e-Fu{H5U#;T_BN6OSG|;90z)F)br>+N-jxDHamZn}ZUfYfAd!Z)U{3chfsB z5QUdr6Z58OIp2|}*j+KuHL*pEthRA{w!$ALTL+Meu5Mbn5v9s){=|7?#9okzWh zNct{vNSP3Boe(9P$UgxD%gUZ+%94KVj#^QB1wA&Z7;Y%ps-Nwnu*F-Zz-VzUzB}0CC_H|&^*MYb8 zJiUbPx?Z+6r!}B*L)+&Kqd;We-D8_cV3duH}+exAHA zi_6zf&0d|Q%%duP?g~^4?I@_LTNu;pGUN-%x^6VfTGn?keD$Sl*ZSgjI6~+b*A^5ds)zByHZ~*9B{o40^$a z#AxYrBZrZG=Id;D@_C-l5FKN9w$|Hq$gudpG!5ZSd5``Ye?L(B0K&%OYJkY*F5~xz?6Haf&h?9~`nS z=Tdj$PyUT@=T`X9YGjZf z%QvOSU#T|r57?Lmoe@dVId(6@>%RTfDI;eo1ocrqLcvIqZFd>z)(N9V*RH z=DkFw*YERXzdD%cx9ypx`Et-}AIm%;h&i~GNrr8m(yC8ELL*J@1g&h`<-LP$dR@}P zi(V&VFX*>TYhBE zbq*tOi5xDD3-b6l2oiuea4~QKE?+?93AhxHE0C5N#V$|iZcN9Ja1e-t;VqbW&S4kk z;&d_Jb1~hvz#z25NehgRFVBqzFqS8LZ-iN%Pz$8mBOEG`N8}UPVK9-%Mz}DM3uUlVkNLM^#hI!e&|8@4~&e!ANErIqnAwj zM<*6>gi(AEK%-#@UkIfGruO^EFogvpOa_DD0Wu*5$@5i)H!k1pWdMnJ;_* diff --git a/statistics/exercises/die2.m b/statistics/exercises/die2.m index bd2e5f1..caaa411 100644 --- a/statistics/exercises/die2.m +++ b/statistics/exercises/die2.m @@ -3,23 +3,25 @@ n = 100; P = zeros(ndies, 6); for i = 1:ndies % (a) roll a single die: - x = rollthedie( n ); + x = rollthedie(n, 6); % (b) compute normalized histogram: - [h,b] = hist( x, 1:6 ); + [h,b] = hist(x, 1:6); h = h/sum(h); % normalization % (c) store the histograms: P(i,:) = h; end + % (c) mean and standard deviation for each eye: m = mean(P, 1); s = std(P, 1); + % (d) plot results: bar(m, 'facecolor', [0.8 0 0]); % darker red hold on; -errorbar(m, s, '.k', 'linewidth', 2 ); % k is black -set(gca, 'XTick', 1:6 ); -xlim( [ 0, 7 ] ); -ylim( [ 0, 0.25]) +errorbar(m, s, '.k', 'linewidth', 2); % k is black +set(gca, 'XTick', 1:6); +xlim([ 0, 7 ]); +ylim([ 0, 0.25]) xlabel('Eyes'); ylabel('Probability'); hold off; diff --git a/statistics/exercises/diehist.m b/statistics/exercises/diehist.m index 1581884..eff8dfe 100644 --- a/statistics/exercises/diehist.m +++ b/statistics/exercises/diehist.m @@ -1,14 +1,15 @@ -function diehist( x ) -% plots a normalized histogram of random numbers x drawn from rolling a -% die. - [h,b] = hist( x, 1:6 ); - h = h/sum(h); % normalization - plot( [0 7], [1/6 1/6], 'r', 'linewidth', 3 ) - hold on - bar( b, h ); - hold off - set(gca, 'XTick', 1:6 ); - xlim( [ 0, 7 ] ); - xlabel('Eyes'); - ylabel('Probability'); +function diehist(x) +% plots a normalized histogram of integer random numbers x +% drawn from rolling a die. +maxx = max(x); +[h,b] = hist(x, 1:maxx); +h = h/sum(h); % normalization +plot([0 maxx+1], [1/maxx 1/maxx], 'r', 'linewidth', 3) +hold on +bar(b, h); +hold off +set(gca, 'XTick', 1:maxx); +xlim([ 0, maxx+1]); +xlabel('Eyes'); +ylabel('Probability'); end diff --git a/statistics/exercises/exercises01.tex b/statistics/exercises/exercises01.tex index 558b14c..9610e9d 100644 --- a/statistics/exercises/exercises01.tex +++ b/statistics/exercises/exercises01.tex @@ -1,4 +1,4 @@ -\documentclass[12pt,a4paper,pdftex]{exam} + \documentclass[12pt,a4paper,pdftex]{exam} \usepackage[german]{babel} \usepackage{pslatex} @@ -84,32 +84,73 @@ jan.benda@uni-tuebingen.de} \input{instructions} +\ifprintanswers% +\else + +\begin{itemize} +\item \"Uberzeuge dich von jeder einzelnen Zeile deines Codes, dass + sie auch wirklich das macht, was sie machen soll! Teste dies mit + kleinen Beispielen direkt in der Kommandozeile. +\item Versuche die L\"osungen der Aufgaben m\"oglichst in + sinnvolle kleine Funktionen herunterzubrechen. + Sobald etwas \"ahnliches mehr als einmal berechnet werden soll, + lohnt es sich eine Funktion daraus zu schreiben! +\item Teste rechenintensive \code{for} Schleifen, Vektoren, Matrizen + zuerst mit einer kleinen Anzahl von Wiederholungen oder kleiner + Gr\"o{\ss}e, und benutze erst am Ende, wenn alles \"uberpr\"uft + ist, eine gro{\ss}e Anzahl von Wiederholungen oder Elementen, um eine gute + Statistik zu bekommen. +\item Benutze die Hilfsfunktion von \code{matlab} (\code{help + command} oder \code{doc command}) und das Internet, um + herauszufinden, wie bestimmte \code{matlab} Funktionen zu verwenden + sind und was f\"ur M\"oglichkeiten sie bieten. + Auch zu inhaltlichen Konzepten bietet das Internet oft viele + Antworten! +\item Die L\"osung bitte als zip-Archiv mit dem Namen + ``probabilities\_\{nachname\}\_\{vorname\}.zip'' auf ILIAS hochladen. +\end{itemize} + +\fi + \begin{questions} -\question \qt{Wahrscheinlichkeiten eines W\"urfels I} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\question \textbf{Lies im Skript das Kapitel 3 ``Programmierstil''!} -Der Computer kann auch als W\"urfel verwendet werden! +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\question \qt{Wahrscheinlichkeiten eines W\"urfels I} +Der Computer kann mit W\"urfeln w\"urfeln die mehr als 6 Seiten haben! \begin{parts} - \part Simuliere 10000 W\"urfe mit dem W\"urfel durch Erzeugung von - ganzzahligen Zufallszahlen mit den Augenzahlen $x_i = 1, 2, \ldots 6$ . + \part Simuliere 10000 W\"urfe mit einem W\"urfel mit acht Seiten + durch Erzeugung von ganzzahligen Zufallszahlen mit den Augenzahlen + $x_i = 1, 2, \ldots 8$ . + + \part Berechne die Wahrscheinlichkeit $P(5)$ des Auftretens der + Augenzahl f\"unf durch Bestimmung der Anzahl der F\"unfen im + Datensatz. + + Entspricht das Ergebnis deiner Erwartung? + + \"Uberpr\"ufe auch die Wahrscheinlichkeit $P(x_i)$ der anderen + Zahlen. - \part Berechne die Wahrscheinlichkeit $P(3)$ - des Auftretens der Augenzahl drei durch Bestimmung der Anzahl der Dreien im Datensatz.\\ - Entspricht das Ergebnis deiner Erwartung?\\ - \"Uberpr\"ufe auch die Wahrscheinlichkeit $P(x_i)$ der anderen Zahlen.\\ Ist das ein fairer W\"urfel? - \part Speicher die berechneten Wahrscheinlichkeiten $P(x_i)$ f\"ur das Auftreten der - gew\"urfelten Zahlen in einem Vektor und benutze die \code{bar} Funktion, - um diese Wahrscheinlichkeiten als Funktion der Augenzahl zu plotten. + \part Speicher die berechneten Wahrscheinlichkeiten $P(x_i)$ f\"ur + das Auftreten der gew\"urfelten Zahlen in einem Vektor und benutze + die \code{bar()} Funktion, um diese Wahrscheinlichkeiten als + Funktion der Augenzahl zu plotten. \part Erstelle in einem weiterem Plot ein entsprechendes normiertes Histogramm - mit der \code{hist} Funktion. + mit Hilfe der \code{hist()} und \code{bar()} Funktionen. + + \part \extra Wie k\"onnte man einen gezinkten sechsseitigen W\"urfel + simulieren, bei dem die sechs dreimal so h\"aufig wie die anderen + Zahlen gew\"urfelt wird? - \part \extra Wie k\"onnte man einen gezinkten W\"urfel simulieren, bei dem die sechs - dreimal so h\"aufig wie die anderen Zahlen gew\"urfelt wird?\\ - Fertige von diesem W\"urfel ein Histogram aus 10000 W\"urfen an. + Fertige von diesem W\"urfel ein normiertes Histogram aus 10000 + W\"urfen an. \end{parts} \begin{solution} \lstinputlisting{rollthedie.m} @@ -120,6 +161,7 @@ Der Computer kann auch als W\"urfel verwendet werden! \continue +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \question \qt{Wahrscheinlichkeiten eines W\"urfels II} Wir werten nun das Verhalten mehrerer W\"urfel aus. \begin{parts} @@ -128,8 +170,8 @@ Wir werten nun das Verhalten mehrerer W\"urfel aus. \part Berechne aus diesem Datensatz f\"ur jeden W\"urfel ein normiertes Histogramm. \part Bestimme den Mittelwert und die Standardabweichung f\"ur jede Augenzahl gemittelt \"uber die W\"urfel. - \part Stelle das Ergebnis mit einem S\"aulenplot mit Fehlerbalken dar - (\code{bar} mit \code{errorbar} Funktionen). + \part Stelle das Ergebnis in einem S\"aulenplot mit Fehlerbalken dar + (\code{bar()} mit \code{errorbar()} Funktionen). \end{parts} \begin{solution} \lstinputlisting{die2.m} @@ -137,45 +179,43 @@ Wir werten nun das Verhalten mehrerer W\"urfel aus. \end{solution} -\question \qt{Wahrscheinlichkeiten der Normalverteilung} -Mit den folgenden Aufgaben wollen wir bestimmen, welcher Anteil eines -normalverteilten Datensatzes in bestimmten Grenzen symmetrisch um den -Mittelwert enthalten ist. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\question \qt{Histogramm der Normalverteilung} +\vspace{-3ex} \begin{parts} \part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus $n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und - Standardabweichung $\sigma=1$. - \part \label{onesigma} Wieviele dieser Daten sind maximal eine Standardabweichung vom Mittelwert entfernt?\\ - D.h. wieviele Datenwerte $x_i$ haben den Wert $-\sigma < x_i < +\sigma$?\\ - Wie gro{\ss} ist also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen - Wert in diesem Interval zu erhalten? - \part \label{probintegral} Berechne numerisch diese - Wahrscheinlichkeit aus dem entsprechenden Integral - \[ P_{\pm\sigma}=\int_{x=\mu-\sigma}^{x=\mu+\sigma} p_g(x) \, dx \] - \"uber die Normalverteilung - \[ p_g(x) = - \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \] - \"Uberpr\"ufe zuerst, ob tats\"achlich - \[ \int_{-\infty}^{+\infty} p_g(x) \, dx = 1 \; . \] - Warum muss das so sein? - \part Welcher Anteil der Daten ist in den Intervallen $\pm2\sigma$ sowie $\pm3\sigma$ - enthalten? - \part \label{givenfraction} Finde heraus in welchem Interval symmetrisch um den Mittelwert - 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten sind. - \part Was passiert mit der Wahrscheinlichkeit eine Zahl in einem bestimmten Interval - zu ziehen, wenn dieses Intervall immer kleiner wird?\\ - Schreibe ein Programm, das dies illustriert.\\ - Wie gro{\ss} ist die Wahrscheinlichkeit $P(x_i=0.1234)$? - \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma} - -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit - beliebigen Mittelwerten und Standardabweichungen funktioniert.\\ - Teste den Code mit entsprechenden Zufallszahlen.\\ - Wie bekommt man mit \code{randn} Zufallszahlen mit beliebiger - Standardabweichung und Mittelwerten? + Standardabweichung $\sigma=1$ (\code{randn()} Funktion). + + \part Berechne aus diesem Datensatz die Wahrscheinlichkeit $P(0\le + x<0.5)$. + + \part Was passiert mit der Wahrscheinlichkeit eine Zahl in einem + bestimmten Interval zu ziehen (z.B. $P(0\le x=0.0 & x<0.5); +P = n/length(x); +fprintf('probability 0<=x<0.5 is %g\n', P); + +%% c) probability for decreasing intervals: +upper = [0.0:0.01:4.0]; +P = zeros(length(upper), 1); +for k=1:length(upper) + P(k) = sum((x>=0) & (x=bins(k)-bw/2) & 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 K1rr-n&i?^@@RhCr literal 0 HcmV?d00001 diff --git a/statistics/exercises/normprobs.m b/statistics/exercises/normprobs.m index d858b27..33af699 100644 --- a/statistics/exercises/normprobs.m +++ b/statistics/exercises/normprobs.m @@ -24,23 +24,3 @@ P = sum(pg((xx>=-2.0)&(xx<=2.0)))*dx; fprintf( 'Integral over the Gaussian pdf from -2 to 2 is %.4f\n', P ); P = sum(pg((xx>=-3.0)&(xx<=3.0)))*dx; fprintf( 'Integral over the Gaussian pdf from -3 to 3 is %.4f\n\n', P ); - -%% (e) probability of small ranges -nr = 50; -xmax = 3.0 -xs = zeros(nr, 1); % size of integration interval -Ps = zeros(nr, 1); % storage -for i = 1:nr - % upper limit goes from 4.0 down to 0.0: - xupper = xmax*(nr-i)/nr; - xs(i) = xupper; - % integral from 0 to xupper: - Ps(i) = sum(pg((xx>=0.0)&(xx<=xupper)))*dx; -end -plot( xs, Ps, 'linewidth', 3 ) -xlim([0 xmax]) -ylim([0 0.55]) -xlabel('Integration interval') -ylabel('Probability') -fprintf('The probability P(0.1234) = %.4f\n\n', sum(x == 0.1234)/length(x) ); -savefigpdf(gcf, 'normprobs.pdf', 12, 8); diff --git a/statistics/exercises/normprobs.pdf b/statistics/exercises/normprobs.pdf deleted file mode 100644 index f0e545661ff2e2f0698a04870363860097d3ed7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3488 zcmb_fc~nzZ8kc(90#>JjOF_M&G+{~Jmi>@G%pw$mG=ZW6$azU_;FXYB@B#eh`>AII*EUbgk+pS}MkRr3jU%ObBvE+=Sr+0+b_nK^XQq1Jh0r#I3`xf8MJNWha9bXg& zce_eHtxv>{Z#^uu{wX2)x!VaIVf?6=$u-lhu_k8n_}0{IEhE~dMGFlVn&uQTb6h8~ z*WDWZ+{`O;KG+4Wje1x1X;<3wIYoKprdv2XoY#B3;nyk4Eou5}=lRUud(EDPUo{o| zwmq%rTcLDQr)zI~P)W_`u6TA=#eCC_o!#epChm!DSwC(1cuz;B;amm3rf=Qkgq3Tn z- zOKq9wc0OZYo;UKDGrNC3A+Eyk#-VT0r?h1ju8mTqMy;E=VeF-J`>d#sDmQ!1CYpz+ zvHY5L{q*~%)*rrDxh;6~6WI?l_g5$FQxBeELeE!sSS>Cn1iPkG^{EG3J zvgXU}BTl{*)a~jVY5gFSa<%L9f)!IHtxgARUE^Gr+Ikic^?ZGTqOK=u#*AM~v|fp} z?j>`VCwUrwmYL#w@zkuYOszL7ZcTI3o0((nJts`6yg4qk#qCbb5Qk zg%MLWzV~LE# zWN7@1OKqC9X>Kqn)KR@?+bcI!U+Gilt=f}t^3L}kntRz7+MB9tN58#i%k|zLbAbHH z()y*Jymo)-cS7HiyMc_eU3a^09xFY+?4!Srxzk#%dw+A;$UhnlC8dkb-SBVv*S_P| zN`4yI+PZlf^m`(sg-+r)ibE*=)hcz82uV3KsRgwGh~?Ae5VJ!ML(gSHpcqGNN{IuK z)Ramv2P>et1vt9JLB9Yfai|d)@@$ZELmrKLKF7M9P$&c6(Ql-X2O@BUNfGx%3;jTXlp+5>*g+m(IgEz~#S+ndholrB4M9<* zs4XH&42ni1&9p%K*zy4t5$Ektpgo8K2vOic+nV7DhN6&Q^YiV1Fd8G4#GoQ*=g>$* zF~C7c6J|2IsC0A<^u}wIzxdLi$iupbDi9gsOagULP_@!y!k7gZ zp}?^LLlzVc#{>k1^#jo`?P7z1L8^mZit>`Q+=Y9foFKfo97mrVD&1Jb|6sp+c<427C z1ORl>+gT6et+k+GHb_aFP{|2gPLe1x#51F1jF$7mJY)JGljRCfIgL+>2Z*Cz#4%{o zr(+KbrDI~cABgm+#%{O&=jf}d#KxopcDvrfx`R~+bFwY}W7(f#l|1f2Hv>V=7w&A2 z8-qS5dc>nb5y(%ETkmDLDjM}A9SHakAc*aXp{9}=(-Bi(1Rpep=f>m{`VT%voCCd& z_Lm!^A-M;7>7Y-L8Zn_NfC&LY166KF;ANyrr72S?y~;AJMx!btv|6=GORAtpMJWP& zf02BQvHuX(jtyCSObNpzG`*;r*dR6-CEzK2PfyVhAR_QKNNYs6L#N?;k{m+if$^0+ zsoRs$_7W!sl}4NynME%S6oHc@p`tWO3h~jjJ&6?-WjUGMRFG?$n+6IhAh6RyMG*o< zJ`H61-3stBvB>lFNc1}F>WwhsgW1D(3%VaCxT=f#~@R+fCMC^r*J)vgTewc5EX-vR$Zo6Dv<95 zVw1`KzxGKU+>9X(dL=j@NQnre{U1=PRFn#ML4-yS8nnd35BLXYq(+V2D#K|6L7=(} zr{OvkTH_DVQ2HOC=_vG47=Di+sYh*4kD-wow9+4vrSL~(l_-M2djdx@KFFc}fB@!X z>LAJiK<_6Oy-~y$0Kl^SUKZtEd~#sf7Eqk7rc6o;VOCkS8m&pC)!>B2Mp<#I+NRU! eD6`i1-*1$P&mUf(IU$^Q3Z+Mqlw_T6ll&VbbA9Ll diff --git a/statistics/exercises/rollthedie.m b/statistics/exercises/rollthedie.m index 1842da8..2e42a04 100644 --- a/statistics/exercises/rollthedie.m +++ b/statistics/exercises/rollthedie.m @@ -1,4 +1,5 @@ -function x = rollthedie( n ) -% return a vector with the result of rolling a die n times - x = randi( [1, 6], n, 1 ); +function x = rollthedie(n, m) +% return a vector with the result of rolling a die +% with m eyes n times +x = randi( [1, m], n, 1 ); end From 0e1aa7814d6a2f8984fa3302808fbad9e2a901a1 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 22 Nov 2016 15:14:06 +0100 Subject: [PATCH 10/16] improved functions exercise --- programming/exercises/factorialscripta.m | 6 ++ programming/exercises/factorialscriptb.m | 1 + programming/exercises/factorialscriptc.m | 3 + programming/exercises/printfactorial.m | 8 ++ programming/exercises/randomwalkscriptb.m | 2 +- programming/exercises/randomwalkscriptc.m | 2 +- programming/exercises/scripts_functions.tex | 88 ++++++++++++--------- 7 files changed, 70 insertions(+), 40 deletions(-) create mode 100644 programming/exercises/factorialscripta.m create mode 100644 programming/exercises/factorialscriptb.m create mode 100644 programming/exercises/factorialscriptc.m create mode 100644 programming/exercises/printfactorial.m diff --git a/programming/exercises/factorialscripta.m b/programming/exercises/factorialscripta.m new file mode 100644 index 0000000..38fedde --- /dev/null +++ b/programming/exercises/factorialscripta.m @@ -0,0 +1,6 @@ +n = 5; +x = 1; +for i = 1:n + x = x * i; +end +fprintf('Factorial of %i is: %i\n', n, x) diff --git a/programming/exercises/factorialscriptb.m b/programming/exercises/factorialscriptb.m new file mode 100644 index 0000000..8488431 --- /dev/null +++ b/programming/exercises/factorialscriptb.m @@ -0,0 +1 @@ +printfaculty(5); diff --git a/programming/exercises/factorialscriptc.m b/programming/exercises/factorialscriptc.m new file mode 100644 index 0000000..164ab7b --- /dev/null +++ b/programming/exercises/factorialscriptc.m @@ -0,0 +1,3 @@ +n = 5 +a = myfactorial(n); +fprintf('Factorial of %i is: %i\n', n, x) diff --git a/programming/exercises/printfactorial.m b/programming/exercises/printfactorial.m new file mode 100644 index 0000000..5df0c28 --- /dev/null +++ b/programming/exercises/printfactorial.m @@ -0,0 +1,8 @@ +function printfaculty(n) +% compute the faculty of n and print it +x = 1; +for i = 1:n + x = x * i; +end +fprintf('Factorial of %i is: %i\n', n, x) +end diff --git a/programming/exercises/randomwalkscriptb.m b/programming/exercises/randomwalkscriptb.m index d124e0f..21a0656 100644 --- a/programming/exercises/randomwalkscriptb.m +++ b/programming/exercises/randomwalkscriptb.m @@ -1,7 +1,7 @@ p = 0.5; thresh = 50.0; hold on -for k = 1:30 +for k = 1:10 x = randomwalkthresh(p, thresh); plot(x) end diff --git a/programming/exercises/randomwalkscriptc.m b/programming/exercises/randomwalkscriptc.m index 7f85de4..1aef316 100644 --- a/programming/exercises/randomwalkscriptc.m +++ b/programming/exercises/randomwalkscriptc.m @@ -5,7 +5,7 @@ for sp = 1:4 p = probs(sp); subplot(2, 2, sp); hold on - for k = 1:30 + for k = 1:10 x = randomwalkthresh(p, thresh); if maxt < length(x) maxt = length(x); diff --git a/programming/exercises/scripts_functions.tex b/programming/exercises/scripts_functions.tex index 1167437..6ef775b 100644 --- a/programming/exercises/scripts_functions.tex +++ b/programming/exercises/scripts_functions.tex @@ -1,5 +1,5 @@ -%\documentclass[12pt,a4paper,pdftex]{exam} -\documentclass[answers,12pt,a4paper,pdftex]{exam} +\documentclass[12pt,a4paper,pdftex]{exam} +%\documentclass[answers,12pt,a4paper,pdftex]{exam} \usepackage[german]{babel} \usepackage{natbib} @@ -68,22 +68,26 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \begin{questions} - \question Implementiere die Fakult\"at als Funktion. + \question Berechne die Fakult\"at einer Zahl. \begin{parts} - \part Version 1: berechnet die Fakult\"at von 5 und gib das - Resultat auf dem Bildschirm aus. + \part Version 1: Schreibe eine Skript, das die Fakult\"at von 5 berechnet und das + Resultat auf dem Bildschirm ausgibt. \begin{solution} \lstinputlisting{factorialscripta.m} \end{solution} - \part Version 2: Wie 1 aber die Funktion \"ubernimmt als Argument - die Zahl, von der die Fakult\"at berechnet werden soll. + \part Version 2: Wie Version 1, aber als Funktion, die als + Argument die Zahl, von der die Fakult\"at berechnet werden soll, + \"ubernimmt. \begin{solution} \lstinputlisting{printfactorial.m} \lstinputlisting{factorialscriptb.m} \end{solution} - \part Version 3: Wie 2 aber mit R\"uckgabe des berechneten Wertes. + \part Version 3: Wie Version 2, die Funktion soll den berechneten + Wert nicht ausgeben, sondern als Funktionswert zur\"uckgeben. Das + aufrufende Skript soll dann den berechneten Wert auf dem + Bildschirm ausgeben. \begin{solution} \lstinputlisting{myfactorial.m} \lstinputlisting{factorialscriptc.m} @@ -91,29 +95,38 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: \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} + \question Grafische Darstellung einer Sinuswelle. \begin{parts} - \part Erweitere die Funktion sodass die L\"ange der Zeitachse, die - Schrittweite, Amplitude, Frequenz als Argumente - \"ubergeben werden k\"onnen. + \part Implementiere eine Funktion, die einen Sinus mit der + Amplitude 1 und der Frequenz $f = $ 50\,Hz plottet ($\sin(2\pi \cdot + f \cdot t)$). Rufe die Funktion auf. + \begin{solution} + \lstinputlisting{plotsine50.m} + \lstinputlisting{plotsinea.m} + \end{solution} + + \part Erweitere die Funktion so, dass die L\"ange der Zeitachse, + die Amplitude, und die Frequenz als Argumente \"ubergeben werden + k\"onnen. Die Schrittweite soll in der Funktion aus der Frequenz + berechnet werden. \begin{solution} \lstinputlisting{plotsine.m} \lstinputlisting{plotsineb.m} \end{solution} - \part Gib sowohl den Sinus als auch die Zeitachse zur\"uck. + \part Verlagere alle plot Befehle in das aufrufende Skript + und ver\"andere die Funktion so, dass sie sowohl den Sinus als + auch die Zeitachse zur\"uckgibt. \begin{solution} \lstinputlisting{sinewave.m} \lstinputlisting{plotsinec.m} \end{solution} - \part Extra plot Funktion. + \part Schreibe eine zweite Funktion, die den Sinus plotted und + daf\"ur die Zeitachse und den Sinus als Argument erh\"alt. Diese + Funktion soll die Achsen richtig beschriften. Schreibe ein kleines + Skript, dass beide Funktionen aufruft, um einen Sinus von 5\,Hz + mit der Amplitude 2 \"uber 1.5 Sekunden zu plotten. \begin{solution} \lstinputlisting{plotsinewave.m} \lstinputlisting{plotsined.m} @@ -125,34 +138,33 @@ also als zip-Archiv auf ILIAS hochladen. Das Archiv sollte nach dem Muster: %Vektor zur\"uckgibt. Welche Argumente muss die Funktion %\"ubernehmen? - \question Entwickle ein Programm, das einen 1-D random walk - simuliert. Das Programm soll folgendes leisten: - \begin{itemize} - \item Jede Simulation soll solange laufen, bis eine Abweichung vom - Startwert von $\pm$ 50 erreicht ist. - \item Es soll m\"oglich sein, die Wahrscheinlichkeit f\"ur eine der - beiden Richtungen zu variieren. Variiere im Bereich von 0.5 bis 0.9. - \end{itemize} + \question Random Walk. \begin{parts} - \part \"Uberlege Dir ein geeignetes ``Programmlayout'' aus - Funktionen und Skripten. + \part Lies die Aufgabe bis zum Ende durch. \"Uberlege dir dann ein + geeignetes ``Programmlayout'' aus Funktionen und Skripten. + + Was w\"are eine geeigente Funktion f\"ur diese Aufgabe? Welche + Argumente sollte sie entgegennehmen? Was soll sie berechnen und + zur\"uckgeben? \begin{solution} One function that computes one realisation of a random walk. Scripts for plotting and analysis. + \lstinputlisting{randomwalkthresh.m} \end{solution} - \part Implementiere die L\"osung. + \part Simuliere und plotte die Positionen von 10 Realisationen + eines random walk mit gleichen Wahrscheinlichkeiten f\"ur beide + Richtungen. Jeder Walker startet an der Position 0 und soll so + lange laufen, bis er den Wert 50 \"uberschreitet oder den Wert + $-50$ unterschreitet. \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. + \part Jetzt wollen wir die Wahrscheinlichkeit $p$ f\"ur eine + Bewegung zu gr\"o{\ss}eren Positionen im Bereich $0.5 \le p < 0.8$ + variieren. Simuliere 10 Realisationen des random walk f\"ur vier + verschiedene Wahrscheinlichkeiten. \begin{solution} \lstinputlisting{randomwalkscriptc.m} \end{solution} From d717b436303e22bae07a17bc349fe039f4248e42 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Mon, 28 Nov 2016 17:33:27 +0100 Subject: [PATCH 11/16] new statistics exercises --- pointprocesses/exercises/pointprocesses01.tex | 4 +- statistics/exercises/centrallimit.m | 48 ++--- statistics/exercises/exercises02.tex | 186 +++++++++++------- statistics/exercises/normprobs.m | 49 ++++- 4 files changed, 183 insertions(+), 104 deletions(-) diff --git a/pointprocesses/exercises/pointprocesses01.tex b/pointprocesses/exercises/pointprocesses01.tex index e537be7..ea8674d 100644 --- a/pointprocesses/exercises/pointprocesses01.tex +++ b/pointprocesses/exercises/pointprocesses01.tex @@ -98,8 +98,8 @@ jan.benda@uni-tuebingen.de} Mit den folgenden Aufgaben wollen wir die Statistik der Spiketrains der drei Neurone miteinander vergleichen. \begin{parts} - \part Lade die Spiketrains aus den drei Dateien. Achte darauf, dass sie verschiedene - Variablen\-namen bekommen. + \part Lade die Spiketrains aus den drei Dateien. Achte darauf, + dass sie verschiedene Variablen\-namen bekommen. \begin{solution} \begin{lstlisting} clear all diff --git a/statistics/exercises/centrallimit.m b/statistics/exercises/centrallimit.m index 0794335..cfc5f0d 100644 --- a/statistics/exercises/centrallimit.m +++ b/statistics/exercises/centrallimit.m @@ -3,36 +3,36 @@ n = 10000; m = 10; % number of loops %% (b) a single data set of random numbers: -x = rand( n, 1 ); +x = rand(n, 1); %% (c) plot probability density: -%histogram( x, 'Normalization', 'pdf' ); -[h,b] = hist( x, 20 ); +%histogram(x, 'Normalization', 'pdf'); +[h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) title('A uniform distribution') xlabel('x') ylabel('probability density') -pause( 2.0 ) +pause(2.0) %% (d) sum of two random numbers: -y = rand( n, 1 ); +y = rand(n, 1); x = x + y; -%histogram( x, 'Normalization', 'pdf' ); -[h,b] = hist( x, 20 ); +%histogram(x, 'Normalization', 'pdf'); +[h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) title('Sum of two uniform distributions') xlabel('x') ylabel('probability density') -pause( 2.0 ) +pause(2.0) %% (f) sum up more distributions: -x = zeros( n, 1 ); -means = zeros( m, 1 ); -stds = zeros( m, 1 ); +x = zeros(n, 1); +means = zeros(m, 1); +stds = zeros(m, 1); for i=1:m - y = rand( n, 1 ); % new uniform distributed numbers + y = rand(n, 1); % new uniform distributed numbers x = x + y; % add them to the sum mu = mean(x); % compute mean sd = std(x); % compute standard deviation @@ -42,34 +42,34 @@ for i=1:m xx = -1:0.01:i+1; % x-axis values for plot of pdf p = exp(-0.5*(xx-mu).^2/sd^2)/sqrt(2*pi*sd^2); % pdf plot(xx, p, 'r', 'linewidth', 3 ) - ns = sprintf( 'N=%d', i ); - text( 0.1, 0.9, ns, 'units', 'normalized' ) + ns = sprintf('N=%d', i); + text(0.1, 0.9, ns, 'units', 'normalized') hold on - %histogram( x, 20, 'Normalization', 'pdf' ); - [h,b] = hist( x, 20 ); + %histogram(x, 20, 'Normalization', 'pdf'); + [h,b] = hist(x, 20); h = h/sum(h)/(b(2)-b(1)); % normalization bar(b, h) hold off xlim([-0.5, i+0.5]) - xlabel( 'x' ) - ylabel( 'summed pdf' ) - savefigpdf( gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5 ); + xlabel('x') + ylabel('summed pdf') + savefigpdf(gcf, sprintf('centrallimit-hist%02d.pdf', i), 6, 5); if i < 6 - pause( 3.0 ) + pause(3.0) end end %% (h) mean and standard deviation in dependence on number of summed up distributions: nx = 1:m; -plot( nx, means, 'b', 'linewidth', 4 ); +plot(nx, means, 'b', 'linewidth', 4); hold on -plot( nx, stds, 'r', 'linewidth', 4 ); +plot(nx, stds, 'r', 'linewidth', 4); xx = 0:0.01:m; sdu = 1.0/sqrt(12); % standarad deviation of the uniform distribution plot( xx, sqrt(xx)*sdu, 'k' ) -legend( 'mean', 'std', 'theory' ) +legend('mean', 'std', 'theory') xlabel('N') hold off -savefigpdf( gcf, 'centrallimit-samples.pdf', 6, 5 ); +savefigpdf(gcf, 'centrallimit-samples.pdf', 6, 5); diff --git a/statistics/exercises/exercises02.tex b/statistics/exercises/exercises02.tex index 1aa4b20..82e2528 100644 --- a/statistics/exercises/exercises02.tex +++ b/statistics/exercises/exercises02.tex @@ -15,7 +15,7 @@ \else \newcommand{\stitle}{} \fi -\header{{\bfseries\large \"Ubung 6X\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 22. November, 2016}} +\header{{\bfseries\large \"Ubung 7\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 29. November, 2016}} \firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -78,6 +78,8 @@ jan.benda@uni-tuebingen.de} \newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} \newcommand{\code}[1]{\texttt{#1}} +\graphicspath{{../../pointprocesses/exercises/}} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{document} @@ -96,13 +98,16 @@ Mittelwert enthalten ist. \part Erzeuge einen Datensatz $X = (x_1, x_2, ... x_n)$ aus $n=10000$ normalverteilten Zufallszahlen mit Mittelwert $\mu=0$ und Standardabweichung $\sigma=1$ (\code{randn() Funktion}). - \part Bestimme und plotte die Wahrscheinlichkeitsdichte dieser Zufallszahlen (normiertes Histogramm). - \part Plotte zum Vergleich in den gleichen Plot die Normalverteilung + \part Bestimme und plotte die Wahrscheinlichkeitsdichte dieser + Zufallszahlen (normiertes Histogramm) und plotte zum Vergleich in + den gleichen Plot die Normalverteilung \[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2} \; . \] - \part \label{onesigma} Wieviele dieser Daten sind maximal eine Standardabweichung vom Mittelwert entfernt?\\ + + \part \label{onesigma} Wieviele dieser Daten $X$ sind maximal eine Standardabweichung vom Mittelwert entfernt?\\ D.h. wieviele Datenwerte $x_i$ haben den Wert $-\sigma < x_i < +\sigma$?\\ - Wie gro{\ss} ist also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen + Wie gro{\ss} ist dann also die Wahrscheinlichkeit $P_{\pm\sigma}$ einen Wert in diesem Interval zu erhalten? + \part \label{probintegral} Berechne numerisch diese Wahrscheinlichkeit aus dem entsprechenden Integral \[ P_{\pm\sigma}=\int_{x=\mu-\sigma}^{x=\mu+\sigma} p_g(x) \, dx \] @@ -110,16 +115,24 @@ Mittelwert enthalten ist. \"Uberpr\"ufe zuerst, ob tats\"achlich \[ \int_{-\infty}^{+\infty} p_g(x) \, dx = 1 \; . \] Warum muss das so sein? - \part Welcher Anteil der Daten ist in den Intervallen $\pm2\sigma$ sowie $\pm3\sigma$ - enthalten? - \part \label{givenfraction} Finde heraus in welchem Interval symmetrisch um den Mittelwert - 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten sind. - \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma} - -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit - beliebigen Mittelwerten und Standardabweichungen funktioniert.\\ - Teste den Code mit entsprechenden Zufallszahlen.\\ - Wie bekommt man mit \code{randn()} Zufallszahlen mit beliebiger - Standardabweichung und Mittelwerten? + + \part Welcher Anteil der Daten ist in den Intervallen $\pm 2\sigma$ + sowie $\pm 3\sigma$ enthalten? + + Vergleiche die Ergebnisse jeweils mit dem entsprechenden Integral + \"uber die Wahrscheinlichkeitsdichte. + + \part \label{givenfraction} Finde durch numerische Integration der + Wahrscheinlichkeitsdichte heraus, in welchem Interval symmetrisch um + den Mittelwert 50\,\%, 90\,\%, 95\,\% bzw. 99\,\% der Daten enhalten + sind. + + % \part \extra Modifiziere den Code der Teilaufgaben \pref{onesigma} + % -- \pref{givenfraction} so, dass er f\"ur Datens\"atze mit + % beliebigen Mittelwerten und Standardabweichungen funktioniert.\\ + % Teste den Code mit entsprechenden Zufallszahlen.\\ + % Wie bekommt man mit \code{randn()} Zufallszahlen mit beliebiger + % Standardabweichung und Mittelwerten? \end{parts} \begin{solution} \lstinputlisting{normprobs.m} @@ -134,30 +147,40 @@ distributed) Zufallsvariablen gegen die Normalverteilung konvergiert. Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen. \begin{parts} - \part Versuche dir klar zu machen, was der Zentrale Grenzwertsatz - bedeutet, und wie du vorgehen k\"onntest ein Programm zu - schreiben, das den Grenzwertsatz illustriert. + \part Bevor du die weiteren Teilaufgaben liest, versuche dir klar zu + machen, was der Zentrale Grenzwertsatz bedeutet, und wie du vorgehen + k\"onntest ein Programm zu schreiben, das den Grenzwertsatz + illustriert. + \part Erzeuge 10000 zwischen 0 und 1 gleichverteilte Zufallszahlen (Funktion \code{rand}). + \part Plotte deren Wahrscheinlichkeitsdichte (normiertes Histogram). + \part Erzeuge weitere 10000 gleichverteilte Zufallszahlen und addiere diese zu den bereits vorhandenen auf. + \part Plotte die Wahrscheinlichkeitsdichte der aufsummierten Zufallszahlen. + \part Wiederhole Schritt (d) und (e) viele Male. + \part Vergleiche in einer Grafik die Wahrscheinlichkeitsdichte der aufsummierten Zufallszahlen mit der Gaussfunktion \[ p_g(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^2}\] mit dem Mittelwert $\mu$ und der Standardabweichung $\sigma$ der aufsummierten Zufallszahlen. + \part Wie \"andert sich der Mittelwert und die Standardabweichung/Varianz - der aufsummierten Zufallszahlen?\\ + der aufsummierten Zufallszahlen? + Wie h\"angen diese mit den Werten der urspr\"unglichen Verteilung zusammen? - \part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit exponentiell - verteilten Zufallszahlen (Funktion \code{rande}). + + \part \extra \"Uberpr\"ufe den Grenzwertsatz in gleicher Weise mit + exponentiell verteilten Zufallszahlen (Funktion \code{rande}). \end{parts} \begin{solution} \lstinputlisting{centrallimit.m} @@ -169,56 +192,81 @@ Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen. \end{solution} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\question \qt{Random Walk} -Im folgenden wollen wir einige Eigenschaften des Random Walks bestimmen. -\begin{parts} - \part Schreibe eine Funktion, die einen einzelnen Random Walk mit - Startwert 0 f\"ur $n$ Schritte und Wahrscheinlichkeit $p$ f\"ur - einen positiven Schritt als Vektor zur\"uckgibt. - \part Visualisiere jeweils 10 Random Walks mit $p=0.5$ zusammen in einem Plot - f\"ur $n=100$, $n=1000$ und $n=10000$ (drei Plots).\\ - Sch\"atze aus den Abbildungen ab, wie sich der Mittelwert und die Standardabweichung - des Random Walks mit der Zeit (Schritte) sich entwickelt. - \part \"Uberpr\"uefe deine Hypothese zum Mittelwert und zur - Standardabweichung, indem du von $m$ Random Walks ($m \ge 10$) f\"ur - jeden z.B. zehnten Schritt den Mittelwert und die Standardabweichung - \"uber die Positionen der $m$ Random Walks berechnest.\\ - Wie h\"angt also die Standardabweichung von der Anzahl der Schritte - ab? Wie entwickelt sich die Standardabweichung f\"ur eine sehr - gro{\ss}e Anzahl von Schritten? - \part \extra Erstelle eine Grafik, die die Verteilung der Position eines Random Walkers - zu drei verschiedenen Zeitpunkten zeigt. -\end{parts} -\begin{solution} - \lstinputlisting{randomwalk.m} - \lstinputlisting{randomwalkstatistics.m} - \includegraphics[width=0.8\textwidth]{randomwalk-traces}\\ - \includegraphics[width=0.5\textwidth]{randomwalk-stdev} - \includegraphics[width=0.5\textwidth]{randomwalk-hists} -\end{solution} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \question \qt{Intervallstatistik von Spiketrains} + In Ilias findet ihr die Dateien \code{poisson.mat}, + \code{pifou.mat}, und \code{lifadapt.mat}. Jede dieser Dateien + enth\"alt mehrere Trials von Spiketrains von einer bestimmten Art + von Neuron. Die Spikezeiten sind in Sekunden gemessen. + Mit den folgenden Aufgaben wollen wir die Intervallstatistik der + Spiketrains der drei Neurone miteinander vergleichen. + \begin{parts} + \part Lade die Spiketrains aus den drei Dateien. Achte darauf, + dass sie verschiedene Variablen\-namen bekommen. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\question \qt{\extra 2D Random Walk} -Bisher hat sich unser Random Walker nur in einer Dimension bewegt -(nur vorw\"arts oder r\"uckw\"arts). Er kann aber auch in mehreren Dimensionen laufen!\\ -In zwei Dimensionen wird dazu in jedem Schritt eine weitere -Zufallszahl gezogen, die bestimmt ob er einen Schritt nach links oder -rechts gemacht hat. Die Bewegung nach vorne/hinten bzw. links/rechts -sind unabh\"angig voneinander. -\begin{parts} - \part Wie kann unter Verwendung unserer Funktion f\"ur den - eindimensionalen Random Walk ein zweidimensionaler Random Walk - simuliert werden? - \part Erstelle h\"ubsche Bilder, die zweidimensionalen Random - Walks verschiedener L\"ange (bis zu mindestens $n=1000000$) illustrieren. - \part Animationen sind auch sch\"on! z.B. mit dem \code{pause} Befehl. - \part Anstatt einfach den Weg des Random Walks zu zeichnen, kann man - sich auch merken, wie oft er an jeder Stelle vorbeigekommen ist und - mit einem Farbcode plotten. -\end{parts} + In welchem Datentyp liegen die Daten vor? Wie kann auf einzelne + Spiketrains zugegriffen werden? Wie auf einzelne Spikezeiten? + \begin{solution} + \begin{lstlisting} + clear all + % not so good: + load poisson.mat + whos + poissonspikes = spikes; + load pifou.mat; + pifouspikes = spikes; + load lifadapt.mat; + lifadaptspikes = spikes; + clear spikes; + % better: + clear all + x = load( 'poisson.mat' ); + poissonspikes = x.spikes; + x = load( pifou.mat' ); + pifouspikes = x.spikes; + x = load( 'lifadapt.mat' ); + lifadaptspikes = x.spikes; + \end{lstlisting} + \end{solution} + + \part Schreibe eine Funktion, die die Spikezeiten der ersten + $t_{max}$ Sekunden in einem Rasterplot visualisiert. In jeder + Zeile des Rasterplots wird ein Spiketrain dargestellt. Jeder + einzelne Spike wird als senkrechte Linie zu der Zeit des + Auftretens des Spikes geplottet. Benutze die Funktion, um die + Spikeraster der ersten 1\,s der drei Neurone nebeneinander zu plotten. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/spikeraster.m} + \lstinputlisting{../../pointprocesses/code/plotspikeraster.m} + \mbox{}\\[-3ex] + \colorbox{white}{\includegraphics[width=1\textwidth]{spikeraster}} + \end{solution} + + \part Schreibe eine Funktion, die einen einzigen Vektor mit den + Interspikeintervallen aller Trials von Spikezeiten zur\"uckgibt. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/isis.m} + \end{solution} + + \part Schreibe eine Funktion, die ein normiertes Histogramm aus + einem Vektor von Interspikeintervallen, gegeben in Sekunden, + berechnet und dieses mit richtiger Achsenbeschriftung plottet. + Die Interspikeintervalle sollen dabei in Millisekunden angegeben + werden. Die Funktion soll zus\"atzlich den Mittelwert, die + Standardabweichung, und den Variationskoeffizienten der + Interspikeintervalle berechnen und diese im Plot mit angeben. + + Benutze die vorherige und diese Funktion, um die + Interspikeintervall Verteilung der drei Neurone zu vergleichen. + \begin{solution} + \lstinputlisting{../../pointprocesses/code/isihist.m} + \lstinputlisting{../../pointprocesses/code/plotisih.m} + \mbox{}\\[-3ex] + \colorbox{white}{\includegraphics[width=1\textwidth]{isihist}} + \end{solution} + \end{parts} \end{questions} -\end{document} \ No newline at end of file +\end{document} diff --git a/statistics/exercises/normprobs.m b/statistics/exercises/normprobs.m index 33af699..95f1d0c 100644 --- a/statistics/exercises/normprobs.m +++ b/statistics/exercises/normprobs.m @@ -1,14 +1,30 @@ %% (a) generate normal distributed random numbers: n = 10000; -x = randn( n, 1 ); +x = randn(n, 1); -%% (b) +%% (b) plot histogram and compare with pdf: +bw = 0.5; +bins=[-5:bw:5]; +n = hist(x, bins); +p = n/sum(n)/bw; +subplot(1, 2, 2); +bar(bins, p); +hold on; +xx = [bins(1):0.01:bins(end)]; +gauss = exp(-0.5*xx.^2.0)/sqrt(2*pi); +plot(xx, gauss, 'r', 'linewidth', 2); +hold off; +xlim([-5 5]) +xlabel('x'); +ylabel('p(x)'); + +%% (c) fraction of data in +/- 1 sigma: nsig = sum((x>=-1.0)&(x<=1.0)); Psig = nsig/length(x); fprintf('%d of %d data elements, i.e. %.2f%% are contained in the interval -1 to +1\n\n', ... nsig, length(x), 100.0*Psig ); -%% (c) +%% (d) intgegral over pdf: dx = 0.01; xx = -10:dx:10; % x-values pg = exp(-0.5*xx.^2)/sqrt(2*pi); % y-values Gaussian pdf @@ -17,10 +33,25 @@ P = sum(pg)*dx; fprintf( 'Integral over the Gaussian pdf is %.3f\n', P ); % integral from -1 to 1: P = sum(pg((xx>=-1.0)&(xx<=1.0)))*dx; % we need to use xx, not the random numbers x! -fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n', P ); +fprintf( 'Integral over the Gaussian pdf from -1 to 1 is %.4f\n\n', P ); + +%% (e) +for sigma = [1.0, 2.0, 3.0] + Pdata = sum((x>=-sigma)&(x<=sigma))/length(x); + Ppdf = sum(pg((xx>=-sigma)&(xx<=sigma)))*dx; + fprintf( 'Integral over the Gaussian pdf from -%.0f to +%.0f is %.4f\n', sigma, sigma, Ppdf ); + fprintf( 'Probability of data in range from -%.0f to +%.0f is %.4f\n\n', sigma, sigma, Pdata ); +end + +%% (f) +for P = [0.5, 0.9, 0.95, 0.99] + for upper = xx(xx>0.0) + Ppdf = sum(pg((xx>=-upper)&(xx<=upper)))*dx; + if Ppdf > P + fprintf('-%.2f < x < +%.2f: P=%.2f\n', upper, upper, P); + break + end + end +end + -%% (d) -P = sum(pg((xx>=-2.0)&(xx<=2.0)))*dx; -fprintf( 'Integral over the Gaussian pdf from -2 to 2 is %.4f\n', P ); -P = sum(pg((xx>=-3.0)&(xx<=3.0)))*dx; -fprintf( 'Integral over the Gaussian pdf from -3 to 3 is %.4f\n\n', P ); From 328eb8838a890bdf8b6320aca845cca538f68fb2 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Mon, 28 Nov 2016 21:06:26 +0100 Subject: [PATCH 12/16] leftover statistics exercises --- statistics/exercises/exercises03.tex | 149 +++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 statistics/exercises/exercises03.tex diff --git a/statistics/exercises/exercises03.tex b/statistics/exercises/exercises03.tex new file mode 100644 index 0000000..11e4320 --- /dev/null +++ b/statistics/exercises/exercises03.tex @@ -0,0 +1,149 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[german]{babel} +\usepackage{pslatex} +\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} +\ifprintanswers +\newcommand{\stitle}{: L\"osungen} +\else +\newcommand{\stitle}{} +\fi +\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Statistik}}{{\bfseries\large 29. November, 2016}} +\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{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 +} + +%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{bm} +\usepackage{dsfont} +\newcommand{\naZ}{\mathds{N}} +\newcommand{\gaZ}{\mathds{Z}} +\newcommand{\raZ}{\mathds{Q}} +\newcommand{\reZ}{\mathds{R}} +\newcommand{\reZp}{\mathds{R^+}} +\newcommand{\reZpN}{\mathds{R^+_0}} +\newcommand{\koZ}{\mathds{C}} + +%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\continue}{\ifprintanswers% +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\continuepage}{\ifprintanswers% +\newpage +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\newsolutionpage}{\ifprintanswers% +\newpage% +\else +\fi} + +%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\qt}[1]{\textbf{#1}\\} +\newcommand{\pref}[1]{(\ref{#1})} +\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} +\newcommand{\code}[1]{\texttt{#1}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\input{instructions} + + +\begin{questions} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\question \qt{Statistik des Random Walks} +Im folgenden wollen wir einige Eigenschaften des Random Walks bestimmen. +\begin{parts} + \part Schreibe eine Funktion, die einen einzelnen Random Walk mit + Startwert 0 f\"ur $n$ Schritte und Wahrscheinlichkeit $p$ f\"ur + einen positiven Schritt als Vektor zur\"uckgibt. + + \part Visualisiere jeweils 10 Random Walks mit $p=0.5$ zusammen in einem Plot + f\"ur $n=100$, $n=1000$ und $n=10000$ (drei Plots). + + Sch\"atze aus den Abbildungen ab, wie sich der Mittelwert und die + Standardabweichung des Random Walks mit der Zeit (Schritte) sich + entwickelt. + + \part \"Uberpr\"uefe deine Hypothese zum Mittelwert und zur + Standardabweichung, indem du von $m$ Random Walks ($m \ge 10$) f\"ur + jeden z.B. zehnten Schritt den Mittelwert und die Standardabweichung + \"uber die Positionen der $m$ Random Walks berechnest. + + Wie h\"angt also die Standardabweichung von der Anzahl der Schritte + ab? Wie entwickelt sich die Standardabweichung f\"ur eine sehr + gro{\ss}e Anzahl von Schritten? + + \part \extra Erstelle eine Grafik, die die Verteilung der Position + eines Random Walkers zu drei verschiedenen Zeitpunkten zeigt. +\end{parts} +\begin{solution} + \lstinputlisting{randomwalk.m} + \lstinputlisting{randomwalkstatistics.m} + \includegraphics[width=0.8\textwidth]{randomwalk-traces}\\ + \includegraphics[width=0.5\textwidth]{randomwalk-stdev} + \includegraphics[width=0.5\textwidth]{randomwalk-hists} +\end{solution} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\question \qt{\extra 2D Random Walk} +Bisher hat sich unser Random Walker nur in einer Dimension bewegt +(nur vorw\"arts oder r\"uckw\"arts). Er kann aber auch in mehreren Dimensionen laufen!\\ +In zwei Dimensionen wird dazu in jedem Schritt eine weitere +Zufallszahl gezogen, die bestimmt ob er einen Schritt nach links oder +rechts gemacht hat. Die Bewegung nach vorne/hinten bzw. links/rechts +sind unabh\"angig voneinander. +\begin{parts} + \part Wie kann unter Verwendung unserer Funktion f\"ur den + eindimensionalen Random Walk ein zweidimensionaler Random Walk + simuliert werden? + \part Erstelle h\"ubsche Bilder, die zweidimensionalen Random + Walks verschiedener L\"ange (bis zu mindestens $n=1000000$) illustrieren. + \part Animationen sind auch sch\"on! z.B. mit dem \code{pause} Befehl. + \part Anstatt einfach den Weg des Random Walks zu zeichnen, kann man + sich auch merken, wie oft er an jeder Stelle vorbeigekommen ist und + mit einem Farbcode plotten. +\end{parts} + +\end{questions} + +\end{document} + From f0c3c7f825f3693ede842042be6eb4967340e484 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Mon, 28 Nov 2016 21:14:14 +0100 Subject: [PATCH 13/16] fixed code style --- pointprocesses/code/{isiHist.m => isihist.m} | 10 +++++----- pointprocesses/code/isis.m | 8 ++++---- pointprocesses/code/spikeraster.m | 11 +++++------ 3 files changed, 14 insertions(+), 15 deletions(-) rename pointprocesses/code/{isiHist.m => isihist.m} (75%) diff --git a/pointprocesses/code/isiHist.m b/pointprocesses/code/isihist.m similarity index 75% rename from pointprocesses/code/isiHist.m rename to pointprocesses/code/isihist.m index 4f28f32..33ad4f5 100644 --- a/pointprocesses/code/isiHist.m +++ b/pointprocesses/code/isihist.m @@ -1,7 +1,7 @@ -function [pdf, centers] = isiHist(isis, binwidth) +function [pdf, centers] = isihist(isis, binwidth) % Compute normalized histogram of interspike intervals. % -% [pdf, centers] = isiHist(isis, binwidth) +% [pdf, centers] = isihist(isis, binwidth) % % Arguments: % isis: vector of interspike intervals in seconds @@ -14,15 +14,15 @@ function [pdf, centers] = isiHist(isis, binwidth) if nargin < 2 % compute good binwidth: nperbin = 200; % average number of data points per bin - bins = length( isis )/nperbin; % number of bins - binwidth = max( isis )/bins; + bins = length(isis)/nperbin; % number of bins + binwidth = max(isis)/bins; if binwidth < 5e-4 % half a millisecond binwidth = 5e-4; end end bins = 0.5*binwidth:binwidth:max(isis); % histogram data: - [ nelements, centers ] = hist(isis, bins); + [nelements, centers] = hist(isis, bins); % normalization (integral = 1): pdf = nelements / sum(nelements) / binwidth; end diff --git a/pointprocesses/code/isis.m b/pointprocesses/code/isis.m index b927abd..65a346b 100644 --- a/pointprocesses/code/isis.m +++ b/pointprocesses/code/isis.m @@ -1,7 +1,7 @@ -function isivec = isis( spikes ) +function isivec = isis(spikes) % returns a single list of isis computed from all trials in spikes % -% isivec = isis( spikes ) +% isivec = isis(spikes) % % Arguments: % spikes: a cell array of vectors of spike times in seconds @@ -12,9 +12,9 @@ function isivec = isis( spikes ) isivec = []; for k = 1:length(spikes) - difftimes = diff( spikes{k} ); + difftimes = diff(spikes{k}); % difftimes(:) ensures a column vector % regardless of the type of vector in spikes{k} - isivec = [ isivec; difftimes(:) ]; + isivec = [isivec; difftimes(:)]; end end diff --git a/pointprocesses/code/spikeraster.m b/pointprocesses/code/spikeraster.m index cde46dc..a20b0df 100644 --- a/pointprocesses/code/spikeraster.m +++ b/pointprocesses/code/spikeraster.m @@ -13,18 +13,17 @@ for k = 1:ntrials times = 1000.0*times; % conversion to ms end for i = 1:length( times ) - line([times(i) times(i)],[k-0.4 k+0.4], 'Color', 'k' ); + line([times(i) times(i)],[k-0.4 k+0.4], 'Color', 'k'); end end if tmax < 1.5 - xlabel( 'Time [ms]' ); + xlabel('Time [ms]'); xlim([0.0 1000.0*tmax]); else - xlabel( 'Time [s]' ); + xlabel('Time [s]'); xlim([0.0 tmax]); end -ylabel( 'Trials'); -ylim( [ 0.3 ntrials+0.7 ] ) - +ylabel('Trials'); +ylim([0.3 ntrials+0.7 ]); end From f4bdd26e3f6681b66935a860eb83f0c8315ead40 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 29 Nov 2016 10:10:08 +0100 Subject: [PATCH 14/16] small code fix --- statistics/exercises/exercises02.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/statistics/exercises/exercises02.tex b/statistics/exercises/exercises02.tex index 82e2528..3b2d080 100644 --- a/statistics/exercises/exercises02.tex +++ b/statistics/exercises/exercises02.tex @@ -221,11 +221,11 @@ Den Zentralen Grenzwertsatz wollen wir uns im Folgenden veranschaulichen. clear spikes; % better: clear all - x = load( 'poisson.mat' ); + x = load('poisson.mat'); poissonspikes = x.spikes; - x = load( pifou.mat' ); + x = load('pifou.mat'); pifouspikes = x.spikes; - x = load( 'lifadapt.mat' ); + x = load('lifadapt.mat'); lifadaptspikes = x.spikes; \end{lstlisting} \end{solution} From 8a7e2402cb9c133a021ecbbdece5201d67771128 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Mon, 5 Dec 2016 23:32:18 +0100 Subject: [PATCH 15/16] new exercises for pint processes --- pointprocesses/exercises/pointprocesses03.tex | 235 ++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100644 pointprocesses/exercises/pointprocesses03.tex diff --git a/pointprocesses/exercises/pointprocesses03.tex b/pointprocesses/exercises/pointprocesses03.tex new file mode 100644 index 0000000..2944430 --- /dev/null +++ b/pointprocesses/exercises/pointprocesses03.tex @@ -0,0 +1,235 @@ +\documentclass[12pt,a4paper,pdftex]{exam} + +\usepackage[german]{babel} +\usepackage{pslatex} +\usepackage[mediumspace,mediumqspace,Gray]{SIunits} % \ohm, \micro +\usepackage{xcolor} +\usepackage{graphicx} +\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref} + +%%%%% layout %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry} +\pagestyle{headandfoot} +\ifprintanswers +\newcommand{\stitle}{: L\"osungen} +\else +\newcommand{\stitle}{} +\fi +\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Punktprozesse}}{{\bfseries\large 6. Dezember, 2016}} +\firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{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 +} + +%%%%% math stuff: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{bm} +\usepackage{dsfont} +\newcommand{\naZ}{\mathds{N}} +\newcommand{\gaZ}{\mathds{Z}} +\newcommand{\raZ}{\mathds{Q}} +\newcommand{\reZ}{\mathds{R}} +\newcommand{\reZp}{\mathds{R^+}} +\newcommand{\reZpN}{\mathds{R^+_0}} +\newcommand{\koZ}{\mathds{C}} + +%%%%% page breaks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\continue}{\ifprintanswers% +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\continuepage}{\ifprintanswers% +\newpage +\else +\vfill\hspace*{\fill}$\rightarrow$\newpage% +\fi} +\newcommand{\newsolutionpage}{\ifprintanswers% +\newpage% +\else +\fi} + +%%%%% new commands %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcommand{\qt}[1]{\textbf{#1}\\} +\newcommand{\pref}[1]{(\ref{#1})} +\newcommand{\extra}{--- Zusatzaufgabe ---\ \mbox{}} +\newcommand{\code}[1]{\texttt{#1}} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{document} + +\input{instructions} + + +\begin{questions} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \question \qt{Statistik von Spiketrains 2} + In Ilias findet ihr die Dateien \code{poisson.mat}, + \code{pifou.mat}, und \code{lifadapt.mat}. Jede dieser Dateien + enth\"alt mehrere Trials von Spiketrains von einer bestimmten Art + von Neuron. Die Spikezeiten sind in Sekunden gemessen. + + Mit den folgenden Aufgaben wollen wir die Statistik der Spiketrains + der drei Neurone miteinander vergleichen. + + Bereits im letzten \"Ubungszettel erstellte Funktionen d\"urfen (sollen!) + wiederverwendet werden. + \begin{parts} + \part Lade die Spiketrains aus den drei Dateien. Stelle sie in Rasterplots dar. + + \part Plotte die Interspike-Intervall Verteilungen. + + Annotiere die Plots mit dem Mittelwert, der + Standardabweichung, und dem Variationskoeffizienten der + Interspikeintervalle sowie der mittleren Feuerrate. + + \part Vergleiche die ISI-Histogramme mit der ISI Verteilung eines Poisson Prozesses + der Rate $\lambda$: + \[ p(T) = \lambda e^{-\lambda T} \; .\] + + \part Erstelle Return-Maps, also jedes Interspike-Intervall $T_{i+1}$ gegen + das vorherige Intervall $T_i$ geplottet. + + \part Schreibe eine Funktion, die die seriellen Korrelationen der + Interspikeintervalle f\"ur Lags bis zu \code{maxlag} berechnet und + plottet. Die Seriellen Korrelationen $\rho_k$ f\"ur Lag $k$ der + Interspikeintervalle $T_i$ sind die Korrelationskoeffizienten + zwischen den Interspikeintervallen $T_i$ und den um das Lag $k$ + verschobenen Intervallen $T_{i+k}$: + \[ \rho_k = \frac{\langle (T_{i+k} - \langle T \rangle)(T_i - + \langle T \rangle) \rangle}{\langle (T_i - \langle T + \rangle)^2\rangle} = \frac{{\rm cov}(T_{i+k}, T_i)}{{\rm + var}(T_i)} = {\rm corr}(T_{i+k}, T_i) \] + + Benutze diese Funktion, um die Interspikeintervall-Korrelationen + der drei Neurone zu vergleichen. + \begin{solution} + \lstinputlisting{../code/isiserialcorr.m} + \lstinputlisting{../code/plotserialcorr.m} + \colorbox{white}{\includegraphics[width=1\textwidth]{serialcorr}} + \end{solution} + + \end{parts} + + \continue + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \question \qt{Homogener Poisson Prozess} + Wir wollen den homogenen Poisson Prozess benutzen um Spikes zu + generieren, mit denen wir die Analysfunktionen des vorherigen + Aufgaben \"uberpr\"ufen k\"onnen. + + Ein homogener Poisson Prozess mit der Rate $\lambda$ (gemessen in + Hertz) ist ein Punktprozess, bei dem die Wahrschienlichkeit eines + Ereignisses unabh\"angig von der Zeit $t$ und unabh\"angig von + vorherigen Ereignissen ist. Wenn wir die Zeitachse in kleine Bins + der Breite $\Delta t$ einteilen, dann ist + \[ P = \lambda \cdot \Delta t \] + die Wahrscheinlichkeit $P$ innerhalb eines Bins ein Ereignis (``spike'') + zu erhalten. $\Delta t$ muss daf\"ur klein genug sein, so dass $P<0.1$. + \begin{parts} + + \part Schreibe eine Funktion die $n$ homogene Poisson Spiketrains + einer gegebenen Dauer $T_{max}$ mit Rate $\lambda$ erzeugt. + + Falls das nicht gelingt, benutze f\"ur die folgenden Aufgaben + soweit m\"oglich spikes aus der Datei \code{poisson.mat}. + \begin{solution} + \lstinputlisting{hompoissonspikes.m} + \end{solution} + + \part Benutze diese Funktion um einige Trials von Spikes zu erzeugen + und plotte diese als Spikeraster. + \begin{solution} + \begin{lstlisting} + spikes = hompoissonspikes( 10, 100.0, 0.5 ); + spikeraster( spikes ) + \end{lstlisting} + \mbox{}\\[-3ex] + \colorbox{white}{\includegraphics[width=0.7\textwidth]{poissonraster100hz}} + \end{solution} + + \part Berechne Histogramme aus den Interspikeintervallen von $n$ + Poisson Spiketrains mit der Rate $\lambda=100$\,Hz. Wie viele bins + werden f\"ur ein ``sch\"ones'' ISI-Histogramm ungef\"ahr ben\"otigt? + Ver\"andere \"uber die Dauer $T_{max}$ der Spiketrains und die + Anzahl $n$ der Trials die Anzahl der Intervalle. Wieviele + Interspikeintervalle werden ben\"otigt, um ein ``sch\"ones'' + Histogramm zu erhalten? Wie lange m\"usste man also von dem Neuron + ableiten? + \begin{solution} + About 5000 intervals for 25 bins. This corresponds to a $5000 / + 100\,\hertz = 50\,\second$ recording of a neuron firing with + 100\,\hertz. + \end{solution} + + \part Vergleiche Interspike-Intervall Histogramme von Poisson-Spikes + verschiedener Raten $\lambda$ mit der theoretisch zu erwartenden Verteilung + der Intervalle $T$ des Poisson Prozesses + \[ p(T) = \lambda e^{-\lambda T} \; .\] + Achte darauf, dass die Bins des Histograms nicht kleiner als $\Delta t$ sind! + \begin{solution} + \lstinputlisting{hompoissonisih.m} + \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih100hz}} + \colorbox{white}{\includegraphics[width=0.48\textwidth]{poissonisih20hz}} + \end{solution} + + \part \extra Was passiert mit den Histogrammen, wenn die Binbreite + der Histogramme kleiner als das bei der Erzeugung der Poisson + Spiketrains verwendete $\Delta t$ ist? + \begin{solution} + Die Bins zwischen der durch $\Delta t$ vorgegebenen + Diskretisierung haben den Wert 0. Dadurch werden aber die anderen + durch die Normierung h\"oher als sie sein sollten. + \end{solution} + + \part Plotte den Mittelwert der Interspikeintervalle, die + dazugeh\"orige Standardabweichung und den Variationskoeffizienten + als Funktion der Rate $\lambda$ des Poisson Prozesses. Vergleiche + die Ergebnisse mit den theoretischen Erwartungen (siehe Vorlesungsskript). + \begin{solution} + \lstinputlisting{hompoissonisistats.m} + \colorbox{white}{\includegraphics[width=0.98\textwidth]{poissonisistats}} + \end{solution} + + \part Plotte die seriellen Korrelationen von Poisson-Spiketrains und + erkl\"are kurz das Ergebniss. + \begin{solution} + \mbox{}\\[-2ex]\hspace*{2cm} + \colorbox{white}{\includegraphics[width=0.8\textwidth]{poissonserial100hz}}\\ + Alle Korrelationen zwischen Interspikeintervallen sind Null, da + beim Poisson Prozess das Auftreten jedes Spikes unabh\"angig von + den vorherigen Spikes ist. + \end{solution} + + \end{parts} + + +\end{questions} + +\end{document} From 9ae3d53ecaab5872a3efcd9b935b9edbce9b21bc Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 6 Dec 2016 13:32:38 +0100 Subject: [PATCH 16/16] fixed pointprocess exercise --- pointprocesses/exercises/pointprocesses03.tex | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/pointprocesses/exercises/pointprocesses03.tex b/pointprocesses/exercises/pointprocesses03.tex index 2944430..31bb760 100644 --- a/pointprocesses/exercises/pointprocesses03.tex +++ b/pointprocesses/exercises/pointprocesses03.tex @@ -15,7 +15,7 @@ \else \newcommand{\stitle}{} \fi -\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Punktprozesse}}{{\bfseries\large 6. Dezember, 2016}} +\header{{\bfseries\large \"Ubung 8\stitle}}{{\bfseries\large Spiketrain Analyse}}{{\bfseries\large 6. Dezember, 2016}} \firstpagefooter{Prof. Dr. Jan Benda}{Phone: 29 74573}{Email: jan.benda@uni-tuebingen.de} \runningfooter{}{\thepage}{} @@ -107,14 +107,15 @@ jan.benda@uni-tuebingen.de} Annotiere die Plots mit dem Mittelwert, der Standardabweichung, und dem Variationskoeffizienten der - Interspikeintervalle sowie der mittleren Feuerrate. + Interspikeintervalle, sowie der mittleren Feuerrate. \part Vergleiche die ISI-Histogramme mit der ISI Verteilung eines Poisson Prozesses der Rate $\lambda$: \[ p(T) = \lambda e^{-\lambda T} \; .\] - \part Erstelle Return-Maps, also jedes Interspike-Intervall $T_{i+1}$ gegen - das vorherige Intervall $T_i$ geplottet. + \part Erstelle Return-Maps f\"ur die drei Spiketrains, also jedes + Interspike-Intervall $T_{i+1}$ gegen das vorherige Intervall $T_i$ + geplottet. \part Schreibe eine Funktion, die die seriellen Korrelationen der Interspikeintervalle f\"ur Lags bis zu \code{maxlag} berechnet und @@ -145,12 +146,12 @@ jan.benda@uni-tuebingen.de} Aufgaben \"uberpr\"ufen k\"onnen. Ein homogener Poisson Prozess mit der Rate $\lambda$ (gemessen in - Hertz) ist ein Punktprozess, bei dem die Wahrschienlichkeit eines + Hertz) ist ein Punktprozess, bei dem die Wahrscheinlichkeit eines Ereignisses unabh\"angig von der Zeit $t$ und unabh\"angig von vorherigen Ereignissen ist. Wenn wir die Zeitachse in kleine Bins der Breite $\Delta t$ einteilen, dann ist \[ P = \lambda \cdot \Delta t \] - die Wahrscheinlichkeit $P$ innerhalb eines Bins ein Ereignis (``spike'') + die Wahrscheinlichkeit innerhalb eines Bins ein Ereignis (``spike'') zu erhalten. $\Delta t$ muss daf\"ur klein genug sein, so dass $P<0.1$. \begin{parts}