This repository has been archived on 2021-05-17. You can view files and clone it, but cannot push or open issues or pull requests.
scientificComputing/programming/lectures/programming_basics.tex
2014-10-08 08:59:41 +02:00

451 lines
10 KiB
TeX

\documentclass{beamer}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{pgf}
%\usepackage{pgf,pgfarrows,pgfnodes,pgfautomata,pgfheaps,pgfshade}
%\usepackage{multimedia}
\usepackage[english]{babel}
\usepackage{movie15}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{amsmath}
\usepackage{bm}
\usepackage[T1]{fontenc}
\usepackage[scaled=.90]{helvet}
\usepackage{scalefnt}
\usepackage{tikz}
\usepackage{ textcomp }
\usepackage{soul}
\usepackage{hyperref}
\definecolor{lightblue}{rgb}{.7,.7,1.}
\definecolor{mygreen}{rgb}{0,1.,0}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\mode<presentation>
{
\usetheme{Singapore}
\setbeamercovered{opaque}
\usecolortheme{tuebingen}
\setbeamertemplate{navigation symbols}{}
\usefonttheme{default}
\useoutertheme{infolines}
% \useoutertheme{miniframes}
}
\AtBeginSection[]
{
\begin{frame}<beamer>
\begin{center}
\Huge \insertsectionhead
\end{center}
% \frametitle{\insertsectionhead}
% \tableofcontents[currentsection,hideothersubsections]
\end{frame}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
\setbeamertemplate{blocks}[rounded][shadow=true]
\title[]{Scientific Computing -- Grundlagen der Programmierung }
\author[]{Jan Grewe\\Abteilung f\"ur Neuroethologie\\
Universit\"at T\"ubingen}
\institute[Wissenschaftliche Datenverarbeitung]{}
\date{03.10.2014 - 07.11.2014}
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
\subject{Einf\"uhrung in wissenschaftliche Datenverarbeitung}
%%%%%%%%%% configuration for code
\lstset{
basicstyle=\ttfamily,
numbers=left,
showstringspaces=false,
language=Matlab,
commentstyle=\itshape\color{darkgray},
keywordstyle=\color{blue},
stringstyle=\color{green},
backgroundcolor=\color{blue!10},
breaklines=true,
breakautoindent=true,
columns=flexible,
frame=single,
captionpos=b,
xleftmargin=1em,
xrightmargin=1em,
aboveskip=10pt
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\mycite}[1]{
\begin{flushright}
\tiny \color{black!80} #1
\end{flushright}
}
\input{../../latex/environments.tex}
\makeatother
\begin{document}
\begin{frame}[plain]
\frametitle{}
\vspace{-1cm}
\titlepage % erzeugt Titelseite
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Themen Woche 1}
\begin{enumerate}
\item MATLAB Entwicklungsumgebung
\item Variablen und Datentypen
\item Vektoren und Matrizen
\item Boolsche Operationen
\item Was ist ein Programm
\item Kontrollstrukturen
\item Vom Problem zum Algorithmus
\item Skripte und Funktionen
\item Stil und Kommentare
\item Graphische Darstellung von Daten
\item Fortgeschrittene Datenstrukturen
\item String Parsing
\item Lesen und schreiben von Dateien, navigieren im Dateisystem
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Themen Woche 1}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/wueste}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Themen Woche 1}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/ski_wueste}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\frametitle{Tagesmen\"u}
\begin{enumerate}
\item [] Die MATLAB Entwicklungsumgebung \& Das Hilfesystem
\item Variablen und Datentypen
\item Skalare, Vektore und Matrizen
\item Boolsche Operatoren
\item Kontrollstrukturen
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{MATLAB IDE \& das Hilfesystem}
\end{frame}
\begin{frame}[plain]
\huge{1. Variablen}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Variablen}
\begin{figure}
\centering
\includegraphics[width=0.2\columnwidth]{./images/bucket.png}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Grundlagen der Programmierung}
\framesubtitle{Variablen}
\huge"Eine Variable ist ein Platz im Speicher."
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variable.pdf}
\end{figure}
\end{frame}
\begin{frame}
\frametitle{Variablen}
\framesubtitle{Datentypen}
\begin{itemize}
\item \textit{integer} - Ganze zahlen. Hier gibt es mehrere
Unterarten, die wir in Matlab weitestgehend ignorieren koennen.
\item \textit{double} - Flie{\ss}kommazahlen.
\item \textit{complex} - Komplexe Zahlen.
\item \textit{logical} - Bool'sche Werte, die als wahr
(\textit{true}) oder falsch (\textit{false}) interpretiert werden.
\item \textit{char} - ASCII Zeichen
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Variablen}
\framesubtitle{Datentypen}
\only<1>{
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variable.pdf}
\end{figure}
}
\only<2>{
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/variableB.pdf}
\end{figure}
}
\end{frame}
\begin{frame}[fragile]
\frametitle{Variablen}
\framesubtitle{Erzeugen von Variablen und Wertezuweisung}
\scriptsize
\begin{lstlisting}[label=varListing1]
>> y = []
y =
[]
>>
>> x = 38
x =
38
>>
\end{lstlisting}
\normalsize
\end{frame}
%\subsection{Calculations with variables}
\begin{frame}[fragile]
\frametitle{Variablen}
\framesubtitle{Rechnen mit Variablen}
\tiny
\begin{lstlisting}[label=varListing2]
>> x = 1;
>> x + 10
ans =
11
>>
>> x % x wurde nicht veraendert
ans =
1
>>
>> y = 2;
>>
>> x + y
ans =
3
>>
>> z = x + y
z =
3
>>
>> z = z * 5;
>> z
z =
15
\end{lstlisting}
\end{frame}
%\subsection{\"Ubungen}
\begin{frame}[fragile]
\frametitle{Variablen}
\framesubtitle{\"Ubungen}
\vspace{-0.25cm}
\begin{enumerate}
\item Erzeuge zwei Variablen \verb+a, b+ und weise ihnen
unterschiedliche Werte zu. Schlie{\ss}e die Zeilen mit einem
Semikolon ab.
\item Lasse die Werte der Variablen ausgeben.
\item F\"uhre einfache mathematische Operationen aus (Addition,
Subtraktion, etc.) Potenzierung erfolgt \"uber das Dach Symbol
\verb+^+). Stelle fest, ob sich der der urspruengliche Wert der
Variable ge\"andert hat.
\item Benuzte die Kommandozeile um herauszufinden, welche Variablen
es im Workspace gibt.
\item Finde in der Hilfe mehr Information \"uber das \verb+clear+ Kommando.
\item L\"osche eine Variable.
\item L\"osche alle \"ubrigen Variablen.
\item Berechne die Fakult\"at von 5 indem eine Variable \verb+x+
erzeugt wird und ihr der Wert 1 zugewiesen wird. In einzelenen
Schritten wird x jeweils das Ergebnis des vorherigen Schrittes
zugewiesen.
\end{enumerate}
\end{frame}
\begin{frame}[plain]
\huge{2. Vektoren und Matrizen}
\end{frame}
\begin{frame}
\frametitle{Vektoren und Matrizen}
\framesubtitle{Skalare vs. Vektoren}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/scalarArray.pdf}
\end{figure}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren und Matrizen}
\framesubtitle{Erzeugen von Vektoren}
\footnotesize
\begin{lstlisting}[label=arrayListing1]
>> a = [0 1 2 3 4 5 6 7 8 9] % Erstellen eines Zeilenvektors
a =
0 1 2 3 4 5 6 7 8 9
>>
>> b = (0:9) % etwas bequemer
b =
0 1 2 3 4 5 6 7 8 9
>>
>> c = (0:2:10)
c =
0 2 4 6 8 10
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren und Matrizen}
\framesubtitle{Spalten \& Zeilenvektoren}
\tiny
\begin{lstlisting}[label=arrayListing2]
>> a = [1 2 3 4 5 6 7 8 9 10] % Erstellen eines Zeilenvektors
a =
1 2 3 4 5 6 7 8 9 10
>>
>> b = [1; 2; 3; 4; 5] % Erstellen eines Spaltenvectors
b =
1
2
3
4
5
>>
>> b = b' % Transponieren
b =
1 2 3 4 5
>>
\end{lstlisting}
\end{frame}
\begin{frame}
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\begin{figure}
\centering
\includegraphics[width=0.8\columnwidth]{./images/arrayIndexing.pdf}
\end{figure}
\pause
Der Zugriff auf die Inhalte eines Vektors erfolgt \"uber den Index.\\
\textbf{Achtung!} Der erste Index ist die 1.
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\vspace{-0.5cm}
\footnotesize
\begin{lstlisting}
>> a = (11:20);
>> a(1) % das 1. Element
ans =
11
>>
>> a(5) % das 5. Element
ans =
15
>>
>> a(end) % das letzte Element
ans =
20
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Zugriff auf Inhalte von Vektoren}
\vspace{-0.5cm}
\footnotesize
\begin{lstlisting}
>> a([1 3 5]) % das 1., 3. und 5. Element
ans =
11 13 15
>>
>> a(2:4) % alle element von Index 2 bis 4
ans =
12 13 14
>>
>> a(1:2:end) %retrieve every second element
>> and =
>> 11 13 15 17 19
>>
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{Grundlegende Operationen}
\vspace{-0.25cm}
\footnotesize
\begin{lstlisting}[label=arrayListing4]
>> a = (0:2:8);
>> a + 5 % addiere einen Skalar
ans =
5 7 9 11 13
>>
>> a * 2 % Multiplication
ans =
0 4 8 12 16
>>
>> a / 2 % Division
ans =
0 1 2 3 4
>>
>> a(1:3) + a(2:4) % Addieren von 2 Vektoren
ans =
2 6 10
>>
>> a(1:2) + a(2:4) % Addierte Vektoren muessen die gleiche Groesse haben!
??? Error using ==> plus
Matrix dimensions must agree.
\end{lstlisting}
\end{frame}
\begin{frame}[fragile]
\frametitle{Vektoren}
\framesubtitle{\"Ubungen}
\begin{enumerate}
\item Erzeuge Vektoren:
\begin{enumerate}
\item Von 1 bis 10 in ganzzahligen Schritten.
\item $2:20$ in 2er Schritten.
\item mit absteigendem Inhalt von 100 bis 0.
\item In 100 Schritten von 0 bis $2\pi$ ($\pi$ ist als Konstante 'pi'
in Matlab definiert).
\end{enumerate}
\item Erzeuge eine Variable und speichere etwas Text in ihr sodass
mindestens 2 Worte vorhanden
sind. \\ (\verb+x = 'some text'+). Benutze die Indizierung um die
Woerter einzeln auszugeben.
\item Definiere zwei Vektoren: \verb+x = [3 2 6 8];+ and \verb+y = [4; 1; 3; 5];+
\begin{enumerate}
\item ... addiere 5 zu jedem Element von \verb+x+.
\item ... addiere 3 zu jedem Element zu jedem Element von y, dass einen nicht gerade Index hat.
\item ... multipliziere jedes Element von \verb+x+ mit dem
entsprechenden Element in \verb+y+ und weise das Ergebnis der
Variable \verb+z+ zu.
\end{enumerate}
\end{enumerate}
\end{frame}
\end{document}