451 lines
10 KiB
TeX
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}
|