[lecture] scripts functions

This commit is contained in:
Jan Grewe 2015-10-13 18:29:25 +02:00
parent 500b829e54
commit 681cc84995

View File

@ -176,15 +176,15 @@
Beispiel: Plot von Sinusschwingungen Beispiel: Plot von Sinusschwingungen
\footnotesize \footnotesize
\begin{lstlisting} \begin{lstlisting}
>> x = (0:0.01:2*pi); t = (0:0.01:10); %s
>> frequenz_1 = 1; frequenz_1 = 1;
>> frequenz_2 = 2; frequenz_2 = 2;
>> y = sin(frequenz_1 * x); y = sin(frequenz_1 * t * 2 * pi);
>> y2 = sin(frequenz_2 * x); y2 = sin(frequenz_2 * t * 2 * pi);
>> plot(x, y); plot(t, y);
>> hold on; hold on;
>> plot(x, y2); plot(t, y2);
\end{lstlisting} \end{lstlisting}
\end{frame} \end{frame}
\begin{frame}[fragile] \begin{frame}[fragile]
@ -194,7 +194,7 @@
\item \"Offnet den Editor und schreibt ein Skript, das vier Sinus \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 mit den Amplituden \code{amplitudes = [0.25, 0.5, 1.0, 2.0]} und
der Frequenz 2\,Hz in einen Graphen plottet (\code{sinus = sin(x * der Frequenz 2\,Hz in einen Graphen plottet (\code{sinus = sin(x *
frequency)* amplitude;}). Benutzt eine \verb+for+ Schleife um frequency * 2 * pi)* amplitude;}). Benutzt eine \verb+for+ Schleife um
die Amplituden abzuarbeiten (\verb+hold on+ um Linien die Amplituden abzuarbeiten (\verb+hold on+ um Linien
\"ubereinander zu plotten). \"ubereinander zu plotten).
\item Speichert das Skript und f\"uhrt es von der Kommandozeile aus. \item Speichert das Skript und f\"uhrt es von der Kommandozeile aus.
@ -279,13 +279,13 @@ end
\footnotesize \footnotesize
\begin{lstlisting} \begin{lstlisting}
function meine_erste_funktion() % Funktionskopf function meine_erste_funktion() % Funktionskopf
x = (0:0.01:2*pi); % hier faengt der Funktionskoerper an t = (0:0.01:2); % hier faengt der Funktionskoerper an
frequenz = 1.0; frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25]; amplituden = [0.25 0.5 0.75 1.0 1.25];
for i = 1:length(amplituden) for i = 1:length(amplituden)
y = sin(frequenz * x) * amplituden(i); y = sin(frequenz * t * 2 * pi) * amplituden(i);
plot(x, y) plot(t, y)
hold on; hold on;
end end
\end{lstlisting} \end{lstlisting}
@ -300,13 +300,13 @@ function meine_erste_funktion() % Funktionskopf
\tiny \tiny
\begin{lstlisting} \begin{lstlisting}
function meine_erste_funktion() function meine_erste_funktion()
x = (0:0.01:2*pi); t = (0:0.01:2);
frequenz = 1.0; frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25]; amplituden = [0.25 0.5 0.75 1.0 1.25];
for i = 1:length(amplituden) for i = 1:length(amplituden)
y = sin(frequenz * x) * amplituden(i); y = sin(frequenz * t * 2 * pi) * amplituden(i);
plot(x, y) plot(t, y)
hold on; hold on;
end end
\end{lstlisting} \end{lstlisting}
@ -361,10 +361,10 @@ Probleme mit dieser Funktion:
\tiny \tiny
\begin{lstlisting} \begin{lstlisting}
function meine_erste_funktion() function meine_erste_funktion()
x = (0:0.01:2*pi); t = (0:0.01:2);
frequenz = 1.0; frequenz = 1.0;
amplituden = 1.0 1.25; amplituden = 1.0 1.25;
y = sin(frequenz * x) * amplitude; y = sin(frequenz * t * 2 * pi) * amplitude;
end end
\end{lstlisting} \end{lstlisting}
\normalsize \normalsize
@ -374,7 +374,7 @@ end
Welche Information muss ich ihr geben?\pause Welche Information muss ich ihr geben?\pause
\begin{itemize} \begin{itemize}
\item Funktion muss wissen: Wie weit soll gerechnet werden? Welche \item Funktion muss wissen: Wie weit soll gerechnet werden? Welche
Aufl\"osung auf der x-Achse? Welche Frequenz? Welche Amplitude? Aufl\"osung auf der Zeitachse? Welche Frequenz? Welche Amplitude?
\item F\"ur einen Plot brauche ich die x- und die y-Werte. Diese \item F\"ur einen Plot brauche ich die x- und die y-Werte. Diese
muss die Funktion zur\"uckgeben. muss die Funktion zur\"uckgeben.
\end{itemize} \end{itemize}
@ -388,10 +388,10 @@ end
\footnotesize \footnotesize
\begin{lstlisting} \begin{lstlisting}
function calculate_sinewave() function calculate_sinewave()
x = (0:0.01:2*pi); t = (0:0.01:2);
frequenz = 1.0; frequenz = 1.0;
amplituden = [0.25 0.5 0.75 1.0 1.25]; amplituden = [0.25 0.5 0.75 1.0 1.25];
y = sin(frequenz * x) * amplituden(i); y = sin(frequenz * t * 2 *pi) * amplituden(i);
end end
\end{lstlisting} \end{lstlisting}
\normalsize \normalsize
@ -403,9 +403,9 @@ end
Argumente: Argumente:
\footnotesize \footnotesize
\begin{lstlisting} \begin{lstlisting}
function calculate_sinewave(frequency, amplitude, x_max, x_step) function calculate_sinewave(frequency, amplitude, t_max, t_step)
x = (0:x_step:x_max); x = (0:t_step:t_max);
y = sin(frequency * x) * amplitude; y = sin(frequency * t * 2 * pi) * amplitude;
end end
\end{lstlisting} \end{lstlisting}
\normalsize \normalsize
@ -417,9 +417,9 @@ end
R\"uckgabewerte: R\"uckgabewerte:
\tiny \tiny
\begin{lstlisting} \begin{lstlisting}
function [x, y] = calculate_sinewave(frequency, amplitude, x_max, x_step) function [t, y] = calculate_sinewave(frequency, amplitude, t_max, t_step)
x = (0:x_step:x_max); x = (0:t_step:t_max);
y = sin(frequency * x) * amplitude; y = sin(frequency * t * 2 * pi) * amplitude;
end end
\end{lstlisting} \end{lstlisting}
\end{frame} \end{frame}
@ -435,7 +435,7 @@ end
\item Schnittstelle definieren: Was will ich von der Funktion? \item Schnittstelle definieren: Was will ich von der Funktion?
Welche Information muss ich ihr geben?\pause Welche Information muss ich ihr geben?\pause
\begin{itemize} \begin{itemize}
\item Funktion muss wissen: Welche Daten soll sie plotten? X-Werte, \item Funktion muss wissen: Welche Daten soll sie plotten? Zeitachse,
y-Werte, einen Namen f\"ur die Legende? y-Werte, einen Namen f\"ur die Legende?
\item Muss nichts zur\"uckgeben. \item Muss nichts zur\"uckgeben.
\end{itemize} \end{itemize}
@ -475,15 +475,15 @@ end
\begin{lstlisting} \begin{lstlisting}
amplitudes = 0.25:0.25:1.25; amplitudes = 0.25:0.25:1.25;
frequency = 2; frequency = 2;
x_max = 10 * pi; t_max = 10;
x_step = 0.01; t_step = 0.01;
figure() figure()
hold on hold on
for a = amplitudes for a = amplitudes
name = num2str(a); name = num2str(a);
[x_data, y_data] = calculate_sinewave(frequency, a, x_max, x_step); [x_data, y_data] = calculate_sinewave(frequency, a, t_max, t_step);
plot_sinewave(x_data, y_data, name) plot_sinewave(x_data, y_data, name)
end end
legend('show') legend('show')
@ -607,26 +607,6 @@ legend('show')
\end{frame} \end{frame}
\begin{frame}[fragile]
\frametitle{Vom Problem zum Algorithmus}
\frametitle{\"Ubungen - Funktionen}
\begin{enumerate}
\item Schreibe eine Funktion \verb+plotSineWave+ die die Amplitude
des Sinus als Argument entgegennimmt.
\item Erweitere die Funktion in der Weise, dass sie zus\"atzlich die
gew\"unschte Frequenz \"ubernimmt.
\item Erweitere \verb+plotSineWave+ so, dass sie eine Schar von
Sinuswellen unterschiedlicher Frequenz plottet.
\item Erweitere \verb+plotSineWave+ so, dass auch die Amplitude als
Vektor \"ubergeben werden kann. Die Funktion soll alle m\"oglichen
Kombinationen darstellen.
\item Erweitere \verb+plotSineWave+ so, dass die berechnete Sinus in
einer 2-D Matrize zur\"uckgegeben werden.
\item F\"uge zwei weitere R\"uckgabeparameter hinzu, die f\"ur jede
Berechnung die Amplitude und Frequenz zur\"uckgeben.
\end{enumerate}
\end{frame}
\begin{frame} \begin{frame}
\frametitle{Vom Problem zum Algorithmus} \frametitle{Vom Problem zum Algorithmus}