[lecture] scripts and functions finished
This commit is contained in:
parent
1746143fa4
commit
51afc62ff4
@ -52,10 +52,10 @@
|
||||
Universit\"at T\"ubingen}
|
||||
|
||||
\institute[Wissenschaftliche Datenverarbeitung]{}
|
||||
\date{03.10.2014 - 07.11.2014}
|
||||
\date{12.10.2015 - 06.11.2015}
|
||||
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
|
||||
|
||||
\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung}
|
||||
\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}
|
||||
\vspace{1em}
|
||||
\titlegraphic{
|
||||
\includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
|
||||
@ -86,6 +86,8 @@
|
||||
\end{flushright}
|
||||
}
|
||||
|
||||
\newcommand{\code}[1]{\texttt{#1}}
|
||||
|
||||
\input{../../latex/environments.tex}
|
||||
\makeatother
|
||||
|
||||
@ -116,7 +118,7 @@
|
||||
\begin{enumerate}
|
||||
\item Was ist ein Program?
|
||||
\item Skripte und Funktionen
|
||||
\item G\"ultigkeitsbereiche
|
||||
\item Programmierstil
|
||||
\item Vom Problem zum Algorithmus
|
||||
\item \"Ubungen, \"Ubungen, \"Ubungen.
|
||||
\end{enumerate}
|
||||
@ -140,7 +142,7 @@
|
||||
\end{itemize}\pause
|
||||
Wenn es zum Leben erweckt wird...
|
||||
\begin{itemize}
|
||||
\item ... wird es Zeile fuer Zeile von oben nach unten ausgef\"uhrt.
|
||||
\item ... wird es Zeile f\"r Zeile von oben nach unten ausgef\"uhrt.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
@ -154,7 +156,8 @@
|
||||
\item Funktionen
|
||||
\item Objekte (werden wir ignorieren)
|
||||
\end{enumerate}\pause
|
||||
\item Alle werden in sogenannte m-files gespeichert (z.B. \textit{meinProgramm.m}).
|
||||
\item Alle werden in sogenannte m-files gespeichert
|
||||
(z.B. \textit{meinProgramm.m}).
|
||||
\item K\"onnen dann von der Kommandozeile aufgerufen werden.
|
||||
\item Programme erh\"ohen die Wiederverwertbarkeit von Programmcode.\pause
|
||||
\item Programme k\"onnen andere Programme aufrufen.
|
||||
@ -190,14 +193,15 @@
|
||||
\begin{enumerate}
|
||||
\item \"Offnet den Editor und schreibt ein Skript, das vier Sinus
|
||||
mit den Amplituden \code{amplitudes = [0.25, 0.5, 1.0, 2.0]} und
|
||||
der Frequenz 2\,Hz in einen Graphen plottet. Benutzt eine \verb+for+
|
||||
Schleife um die Amplituden abzuarbeiten (\verb+hold on+ um Linien
|
||||
der Frequenz 2\,Hz in einen Graphen plottet (\code{sinus = sin(x *
|
||||
frequency)* amplitude;}). Benutzt eine \verb+for+ Schleife um
|
||||
die Amplituden abzuarbeiten (\verb+hold on+ um Linien
|
||||
\"ubereinander zu plotten).
|
||||
\item Speichert das Skript und f\"uhrt es von der Kommandozeile aus.
|
||||
\item Erzeuge ein zweites Skript, das nun das erste aufruft aber bei
|
||||
jedem Aufruf die Frequenz neu setzt. Benutzt eine \verb+for+
|
||||
Schleife um folgende Frequenzen abzuarbeiten
|
||||
\code{frequencies = [2.0, 4.0, 6.0] %Hz}.
|
||||
jedem Aufruf die Frequenz (Variable \code{frequency}) neu
|
||||
setzt. Benutzt eine \verb+for+ Schleife um folgende Frequenzen
|
||||
abzuarbeiten \code{frequencies = [2.0, 4.0, 6.0]}.
|
||||
\item Speichert und ruft dieses Skript \"uber die Kommandozeile
|
||||
auf.
|
||||
\item Was ist geplottet, passt es zu den Erwartungen?
|
||||
@ -205,20 +209,76 @@
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Skripte und Funktionen} \framesubtitle{Funktionen}
|
||||
Vorherige \"Ubung sollte gezeigt haben, dass die Verwendung von
|
||||
globalen Variablen gef\"ahrlich sein kann.
|
||||
Wie l\"ost man dieses Problem?\\
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Skripte}
|
||||
Vorherige \"Ubung sollte gezeigt haben, dass ...
|
||||
\begin{enumerate}
|
||||
\item die Verwendung von globalen Variablen gef\"ahrlich sein kann.
|
||||
\item jede Variable, die in einem aufgerufenen Skript definiert wird
|
||||
im globalen Workspace sichtbar wird.
|
||||
\end{enumerate}
|
||||
\large{Wie l\"ost man dieses Problem?}\\
|
||||
\vspace{3em} \huge{Funktionen!}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Funktionen} \framesubtitle{Funktionen}
|
||||
Funktionen haben ihren eingenen G\"ultigkeitsbereich. Variablen im
|
||||
\textit{Workspace} sind ohne Konsequenzen f\"ur die Funktion.
|
||||
\footnotesize
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Definition:
|
||||
\begin{itemize}
|
||||
\item Eine Funktion in Matlab wird \"ahnlich zu einer mathematischen
|
||||
Funktion definiert:\\
|
||||
\begin{center}
|
||||
\Large$y = f(x)$\normalsize\pause
|
||||
\end{center}
|
||||
\end{itemize}
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
function plot_sinus_mit_amplituden() % Funktionskopf
|
||||
function y = function_name(arg_1, arg_2)
|
||||
% ^ ^ ^
|
||||
% Rueckgabewert Argument_1 Argument_2
|
||||
end
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
\begin{itemize}
|
||||
\item Ein Funktion beginnt mit dem Schl\"usselwort \textbf{function}
|
||||
gefolgt von den R\"uckgabewerten, dem Funktionsnamen und (in
|
||||
Klammern) den Argumenten.
|
||||
\item Auf den Funktionskopf folgt der auszuf\"uhrende Programmcode
|
||||
im Funktionsk\"orper.
|
||||
\item Die Funktionsdefinition wird mit \textbf{end} abgeschlossen.
|
||||
\item Eine Funktion ist in einer eigenen Datei definiert.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Was erreicht man damit?
|
||||
\begin{itemize}
|
||||
\item Kapseln von Programmcode, der f\"ur sich eine Aufgabe l\"ost.
|
||||
\item Definierte Schnittstelle.
|
||||
\item Eigener G\"ultigkeitsbereich:
|
||||
\begin{itemize}
|
||||
\item Variablen im Workspace sind in der Funktion \textbf{nicht} sichtbar.
|
||||
\item Variablen, die in der Funktion definiert werden erscheinen
|
||||
\textbf{nicht} im Workspace.
|
||||
\end{itemize}
|
||||
\item Erhöht die Wiederverwendbarkeit von Programmcode.
|
||||
\item Erh\"oht die Lesbarkeit von Programmen, da sie
|
||||
\"ubersichtlicher werden.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Eine Beispielfunktion, die eine Reihe Sinus plottet.
|
||||
\footnotesize
|
||||
\begin{lstlisting}
|
||||
function meine_erste_funktion() % Funktionskopf
|
||||
x = (0:0.01:2*pi); % hier faengt der Funktionskoerper an
|
||||
frequenz = 1.0;
|
||||
amplituden = [0.25 0.5 0.75 1.0 1.25];
|
||||
@ -228,58 +288,221 @@ function plot_sinus_mit_amplituden() % Funktionskopf
|
||||
plot(x, y)
|
||||
hold on;
|
||||
end
|
||||
\end{lstlisting}\pause
|
||||
Ist das eine gute Funktion?
|
||||
\end{lstlisting}
|
||||
\begin{center}
|
||||
\large{\textbf{Ist das eine gute Funktion?}}
|
||||
\end{center}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
function meine_erste_funktion()
|
||||
x = (0:0.01:2*pi);
|
||||
frequenz = 1.0;
|
||||
amplituden = [0.25 0.5 0.75 1.0 1.25];
|
||||
|
||||
for i = 1:length(amplituden)
|
||||
y = sin(frequenz * x) * amplituden(i);
|
||||
plot(x, y)
|
||||
hold on;
|
||||
end
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
Probleme mit dieser Funktion:
|
||||
\begin{itemize}
|
||||
\item Der Name ist nicht aussagekr\"aftig.
|
||||
\item Die Funktion ist f\"ur genau einen Zweck gut.
|
||||
\item Was sie tut, ist festgelegt und kann von au{\ss}en nicht
|
||||
beeinflusst werden.
|
||||
\item Sie tut 2 Dinge: Sinus berechnen \textbf{und} graphisch darstellen.
|
||||
\item Es ist nicht (einfach) m\"oglich an die berechneten Daten zu
|
||||
kommen.
|
||||
\item Keinerlei Dokumentation. Ich muss den code lesen um zu
|
||||
rekonstruieren, was sie tut.
|
||||
\end{itemize}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen} \framesubtitle{Funktionen }
|
||||
\huge{Wie kann die Funktion besser gemacht werden?}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
\begin{enumerate}
|
||||
\item Identifizieren des Problems.
|
||||
\item Aufteilen in Teilprobleme.
|
||||
\item Gute Namen finden.
|
||||
\item Definieren der Schnittstellen --- Was muss die Funktion
|
||||
wissen? Was möchte ich von ihr haben?
|
||||
\item Daten zur\"uck geben (R\"uckgabewerte definieren).
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Funktionen}
|
||||
\framesubtitle{Argumente und R\"uckgabewerte}
|
||||
Grundlegende Idee ist $y = f(x)$.\\
|
||||
\"Ahnlich dazu kann man den Funktionskopf mit Argumenten und R\"uckgabewerten definieren
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
\textbf{\large{Drei Teilprobleme:}}
|
||||
\begin{enumerate}
|
||||
\item Berechnen der \textbf{einzelnen} Sinus.
|
||||
\item Plotten der Daten.
|
||||
\item Koordinieren von Berechung und Darstellung.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
\large{\textbf{1. Berechnen eines einzelnen Sinus:}}
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
function meine_erste_funktion()
|
||||
x = (0:0.01:2*pi);
|
||||
frequenz = 1.0;
|
||||
amplituden = 1.0 1.25;
|
||||
y = sin(frequenz * x) * amplitude;
|
||||
end
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
\begin{enumerate}
|
||||
\item Namen ersetzten
|
||||
\item Schnittstelle definieren: Was will ich von der Funktion?
|
||||
Welche Information muss ich ihr geben?\pause
|
||||
\begin{itemize}
|
||||
\item Funktion muss wissen: Wie weit soll gerechnet werden? Welche
|
||||
Aufl\"osung auf der x-Achse? Welche Frequenz? Welche Amplitude?
|
||||
\item F\"ur einen Plot brauche ich die x- und die y-Werte. Diese
|
||||
muss die Funktion zur\"uckgeben.
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Namens\"anderung:
|
||||
\footnotesize
|
||||
\begin{lstlisting}
|
||||
function y = plot_sinus(frequenz, amplitude)
|
||||
% ^ ^ ^
|
||||
% Rueckgabewert Argument_1 Argument_2
|
||||
\end{lstlisting}
|
||||
function calculate_sinewave()
|
||||
x = (0:0.01:2*pi);
|
||||
frequenz = 1.0;
|
||||
amplituden = [0.25 0.5 0.75 1.0 1.25];
|
||||
y = sin(frequenz * x) * amplituden(i);
|
||||
end
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Argumente:
|
||||
\footnotesize
|
||||
\begin{lstlisting}
|
||||
function calculate_sinewave(frequency, amplitude, x_max, x_step)
|
||||
x = (0:x_step:x_max);
|
||||
y = sin(frequency * x) * amplitude;
|
||||
end
|
||||
\end{lstlisting}
|
||||
\normalsize
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Funktionen}
|
||||
\framesubtitle{Argumente und R\"uckgabewerte}
|
||||
Eine Funktion kann auch mehrere R\"uckgabewerte haben.
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
R\"uckgabewerte:
|
||||
\tiny
|
||||
\begin{lstlisting}
|
||||
function [y, z] = do_something(a, b)
|
||||
y = a + b
|
||||
z = a * b
|
||||
\end{lstlisting}
|
||||
\pause
|
||||
\begin{itemize}
|
||||
\item Alle R\"uckgabewerte m\"ussen in der Funktion definiert sein!\pause
|
||||
\item Man kann auch mit variablen Anzahlen der Argumente und R\"uckgabewerte programmieren.\pause
|
||||
\item Ist aber deutlich komplexer und fehleranf\"alliger.
|
||||
\end{itemize}
|
||||
function [x, y] = calculate_sinewave(frequency, amplitude, x_max, x_step)
|
||||
x = (0:x_step:x_max);
|
||||
y = sin(frequency * x) * amplitude;
|
||||
end
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Programmierstil}
|
||||
Programmierstil ist:
|
||||
\framesubtitle{Funktionen}
|
||||
\large{\textbf{2. Plotten einer einzelnen Schwingung:}}
|
||||
\normalsize
|
||||
\begin{enumerate}
|
||||
\item Die Namensgebung fuer Variablen und Konstanten.
|
||||
\item Die Namensgebung von Skripten und Funktionen.
|
||||
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben.
|
||||
\item Verwendung von Kommentaren und Hilfetexten.
|
||||
\item Namen finden
|
||||
\item Schnittstelle definieren: Was will ich von der Funktion?
|
||||
Welche Information muss ich ihr geben?\pause
|
||||
\begin{itemize}
|
||||
\item Funktion muss wissen: Welche Daten soll sie plotten? X-Werte,
|
||||
y-Werte, einen Namen f\"ur die Legende?
|
||||
\item Muss nichts zur\"uckgeben.
|
||||
\end{itemize}
|
||||
\end{enumerate}
|
||||
\footnotesize
|
||||
\begin{lstlisting}
|
||||
function plot_sinewave(x_data, y_data, name)
|
||||
plot(x_data, y_data, 'displayname', name)
|
||||
end
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
\large{\textbf{3. Erstellen eines \textbf{Skriptes} zur Koordinierung:}}
|
||||
\normalsize
|
||||
\begin{enumerate}
|
||||
\item Namen finden
|
||||
\item Definieren eins Vektors, f\"ur die Amplituden.
|
||||
\item Definieren einer Variable f\"ur die Frequenz.
|
||||
\item Definieren der Variablen f\"ur das Maximum und die
|
||||
Schrittweite der x-Achse.
|
||||
\item \"Offnen einer neuen Abbildung (\code{figure()}).
|
||||
\item Setzen des \code{hold on}.
|
||||
\item \code{for}-Schleife, die über die Amplituden iteriert, die
|
||||
Sinus berechnen l\"asst und die Resultate an die Plot-Funktion
|
||||
weiterreicht.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Funktionen}
|
||||
\framesubtitle{Zusammenfassung}
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Skript: \verb+plot_sinewaves.m+
|
||||
\footnotesize
|
||||
\begin{lstlisting}
|
||||
amplitudes = 0.25:0.25:1.25;
|
||||
frequency = 2;
|
||||
x_max = 10 * pi;
|
||||
x_step = 0.01;
|
||||
|
||||
figure()
|
||||
hold on
|
||||
|
||||
for a = amplitudes
|
||||
name = num2str(a);
|
||||
[x_data, y_data] = calculate_sinewave(frequency, a, x_max, x_step);
|
||||
plot_sinewave(x_data, y_data, name)
|
||||
end
|
||||
legend('show')
|
||||
\end{lstlisting}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Funktionen}
|
||||
Aufaben:
|
||||
\begin{enumerate}
|
||||
\item Erweitert das Programm so, dass auch ein Satz von Frequenzen
|
||||
benutzt wird.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Skripte undFunktionen}
|
||||
\framesubtitle{Funktionen --- Zusammenfassung}
|
||||
Funktionen sind kleine Code Fragmente, die
|
||||
\begin{enumerate}
|
||||
\item ... genau eine Aufgabe erledigen.
|
||||
@ -294,6 +517,18 @@ function [y, z] = do_something(a, b)
|
||||
\huge{3. Programmierstil}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}
|
||||
\frametitle{Skripte und Funktionen}
|
||||
\framesubtitle{Programmierstil}
|
||||
Programmierstil ist:
|
||||
\begin{enumerate}
|
||||
\item Die Namensgebung fuer Variablen und Konstanten.
|
||||
\item Die Namensgebung von Skripten und Funktionen.
|
||||
\item Die Verwendung von Einr\"uckungen und Leerzeilen um Bl\"ocke im Code hervorzuheben.
|
||||
\item Verwendung von Kommentaren und Hilfetexten.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
\begin{frame}[fragile]
|
||||
\frametitle{Programmierstil}
|
||||
\framesubtitle{Was soll das?}
|
||||
@ -331,7 +566,7 @@ function [y, z] = do_something(a, b)
|
||||
\item Hilfetexte: Ein Problem; sie m\"ussen aktuell sein sonst sind
|
||||
sie sch\"adlicher als wenn sie gar nicht da w\"aren.
|
||||
\item Einr\"uckung ist Pflicht.
|
||||
\item Bl\"ocke im Code werden durch 1 Leerzeichen getrennt.
|
||||
\item Bl\"ocke im Code werden durch 1 Leerzeile getrennt.
|
||||
\end{enumerate}
|
||||
\end{frame}
|
||||
|
||||
|
Reference in New Issue
Block a user