From 0e1aa7814d6a2f8984fa3302808fbad9e2a901a1 Mon Sep 17 00:00:00 2001 From: Jan Benda Date: Tue, 22 Nov 2016 15:14:06 +0100 Subject: [PATCH] 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}