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 bc4ed16..375f3cb 100644 Binary files a/statistics/exercises/die1.pdf and b/statistics/exercises/die1.pdf differ 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) & (x=-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 f0e5456..0000000 Binary files a/statistics/exercises/normprobs.pdf and /dev/null differ 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