new files

This commit is contained in:
Jan Grewe 2015-10-22 18:42:40 +02:00
parent b53411fdda
commit 6be1184d8e
13 changed files with 869 additions and 0 deletions

View File

@ -0,0 +1,127 @@
% Uebungen 3: Boolesche Ausdruecke
%% 1) Boolesche Ausdruecke auf Vektoren
x = [1 5 2 8 9 0 1];
y = [5 2 2 6 0 0 2];
% a
disp('a:')
disp(x > y)
% liefert einern logischen Verktor der 1 an den Stellen ist, an denen der
% Wert in x groesser als der entsprechende Wert in y
% b
disp('b:')
disp(y < x)
% dto., da die Frage nur umgekehrt gestellt wurde
% c
disp('c:')
disp(x == y)
% 1 nur an den Stellen, an denen beide Vektoren geiche Werte enthalten (3
% und 6)
% d
disp('d:')
disp(x ~= y)
% wahr an allen Stellen ausser 3 und 6, da auf ungleichheit der Werte getestet
% wird.
% e
disp('e:')
disp(x & ~y)
% glesen: das Ergebnis sei wahr an den Stellen, an denen x ungleich 0 ist
% (wahr) UND y == 0 (falsch) ist.
% f
disp('f:')
disp(x | y)
% gelesen: das Ergebnis sei wahr an den Stellen, an denen x ODER y ungleich
% 0 ist (alle ausser Nr. 6)
%% 2) bitand und bitor
% a
disp('a:')
disp(bitand(10, 8))
% wenn man sich die Zahlen binaer dargestellt vorstellt, dann werden diese
% binaeren Vektoren mit einem logischen UND bit fuer bit verglichen. Das
% Ergebnis hat eine 1 nur an der 4. Position, der 8.
% b
disp('b:')
disp(bitor(10,8))
% Wiederum binaer dargestellt und mit logischem ODER verglichen. Das
% Ergebnis ist wahr an den Stellen 2 und 4, was der 10 im Dezimalsystem
% entspricht
%% 3) Boolesche Ausdruecke implementieren
% a: Das Ergebnis sei wahr, wenn x groesser als y und die Summe aus x und y
% nicht kleiner als 100 ist.
x > y & (x + y) > 100;
% b: Das Ergebnis sei wahr, wenn x und y ungleich 0 oder x und y gleich sind.
(x & y) | (x == y);
%% 4) Logisches Indizieren
x = (1:10);
y = [3 1 5 6 8 2 9 4 7 0];
% a
disp('a:')
disp(x < 5)
% logischer Vektor, der 1 an den Stellen ist, an denen die Werte in x
% kleiner als 5 sind.
% b
disp('b:')
disp(x( x < 5))
% Die Werte aus x an den Stellen, an denen die Werte in x kleiner als 5
% sind.
% c
disp('c:')
disp(x( (y <= 2) ))
% Die Werte aus x and den Stellen, an denen die Werte in y (!) kleiner oder
% gleich 2 sind.
% d
disp('d:')
disp(x( (x > 2) | (y < 8) ))
% Die Werte aus x an den Stellen, an denen die Werte in x groesse 2 UND die
% Werte in y kleiner 8 sind.
% e
disp('e:')
disp(x( (x == 0) & (y == 0) ))
% Die Werte aus x an den Stellen an denen die Werte in x UND y gleich 0 sind
%% 5) Teste den Zufallsgenerator
x = randi(100, 100, 100); % 1:100
% a
x(x < 33) = 1;
x(x >= 33 & x < 66) = 2;
x(x >= 66) = 3;
% man benutzt das logische Indizieren um all die Were zu ersetzen, die
% einer bestimmten Bedingung entsprechen. z.B: setze all die Werte in x an
% den Stellen, an denen die Werte in x < 33 gleich 1...
% b
disp('Anzahl Werte kleiner 33:')
disp(sum(x(:) == 1))
disp('Anzahl Werte groesser gleich 33 und kleiner 66:')
disp(sum(x(:) == 2))
disp('Anzahl Werte groesser gleich 66:')
disp(sum(x(:) == 3))

View File

@ -0,0 +1,190 @@
%% Uebung 4 Kontrollstrukturen
clear
close all
%% 1) for-Schleife
% a
for i = 0:10
disp(i)
end
% b
for i = 10:-1:0
disp(i)
end
% c
for i = 0:0.1:1
disp(i)
end
%% 2) Zugriffe auf Vektoren mit der Laufvariable
% a
x = 1:100;
% b
for i = 1:length(x)
disp(x(i))
end
% Die Laufvariable erhaelt mit jedem Iterationsschritt einen neuen Wert.
% Dieser "laeuft" von 1 bis zur Anzahl Element in x. Die Laufvar. wird dann
% als Index benutzt mit dem auf x zugegriffen wird.
% c
for i = x
disp(i)
end
% Alternativ kann man mit der Schleife auch direkt durch den Vektor x
% laufen. Mit jeder Iteration enthaelt i nun einen Wert aus x. Es muss
% nicht mehr mittles Index auf x zugegriffen werden.
%% 3 ) Arithmetisches Mittel, Standardabweichung
x = rand(1,50) .* 10; % rand liefert im Bereich 0 bis 1
% a
mittelwert = [];
summe = 0;
n = length(x);
for i = 1:n
summe = summe + x(i);
end
mittelwert = summe / n;
disp(mittelwert)
% b
% 1. Mittelwert berechnen
mittelwert = [];
summe = 0;
n = length(x);
for i = 1:n
summe = summe + x(i);
end
mittelwert = summe / n;
% 2. Std berechnen
standardabw = [];
summe_quadratische_abw = 0;
for i = 1:n
summe_quadratische_abw = summe_quadratische_abw + (x(i) - mittelwert).^2;
end
standardabw = sqrt(summe_quadratische_abw / n);
disp(standardabw)
% c
disp(mean(x))
disp(std(x,1)) % Wir verwenden eine Formel fuer die std, die in Matlab nicht default ist
%% 4 While Schleife
% a
count = 0;
while count < 100
disp(count)
count = count + 1;
end
% b
% count = 0;
% while true
% disp(count)
% count = count + 1;
% end
%% 5
count = 1;
x = 1:10;
while true
disp(x(count))
count = count + 1;
end
%% 6
% a
while true
x = randn(1,1);
if x > 1.33
break;
end
end
% b
trials = zeros(1000,1);
for i = 1:length(trials)
count = 1;
while true
x = randn(1,1);
if x > 1.33
trials(i) = count;
break;
end
count = count + 1;
end
end
disp(mean(trials))
% c
figure()
plot(trials)
xlabel('Durchgang')
ylabel('Anzahl Versuche')
% d
% Mit groesser werdender Schwelle steigt auch die durchschnittliche Anzahl
% Versuche.
%% 7 Loeschen von Elementen
% a
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
for i = length(x):-1:1
if x(i) < 5
x(i) = [];
end
end
disp('nachher:')
disp(x)
% Der Trick ist hier nicht von vorne durch den Vektor zu laufen, sondern
% rueckwaerts. Ansonsten laeuft man Gefahr hinter den gekuerzten Vektor zu
% greifen, was zu einem Index exceeds matrix dimensions Fehler fuehren
% wuerde.
% b
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
for i = length(x):-1:1
if x(i) < 5 & x(i) > 2
x(i) = [];
end
end
disp('nachher:')
disp(x)
% c
x = rand(10,1) .* 10;
disp('vorher:')
disp(x)
x(x < 5 & x >2) = [];
disp('nachher:')
disp(x)
%% 8 Teste den Zufallsgenerator

View File

@ -0,0 +1,98 @@
\documentclass[12pt,a4paper,pdftex]{exam}
\usepackage[german]{babel}
\usepackage{natbib}
\usepackage{graphicx}
\usepackage[small]{caption}
\usepackage{sidecap}
\usepackage{pslatex}
\usepackage{amsmath}
\usepackage{amssymb}
\setlength{\marginparwidth}{2cm}
\usepackage[breaklinks=true,bookmarks=true,bookmarksopen=true,pdfpagemode=UseNone,pdfstartview=FitH,colorlinks=true,citecolor=blue]{hyperref}
%%%%% text size %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage[left=20mm,right=20mm,top=25mm,bottom=25mm]{geometry}
\pagestyle{headandfoot} \header{{\bfseries\large \"Ubung
4}}{{\bfseries\large }}{{\bfseries\large 23. Oktober, 2015}}
\firstpagefooter{Dr. Jan Grewe}{Phone: 29 74588}{Email:
jan.grewe@uni-tuebingen.de} \runningfooter{}{\thepage}{}
\setlength{\baselineskip}{15pt}
\setlength{\parindent}{0.0cm}
\setlength{\parskip}{0.3cm}
\renewcommand{\baselinestretch}{1.15}
\newcommand{\code}[1]{\texttt{#1}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\vspace*{-6.5ex}
\begin{center}
\textbf{\Large Einf\"uhrung in die wissenschaftliche Datenverarbeitung}\\[1ex]
{\large Jan Grewe, Jan Benda}\\[-3ex]
Abteilung Neuroethologie \hfill --- \hfill Institut f\"ur Neurobiologie \hfill --- \hfill \includegraphics[width=0.28\textwidth]{UT_WBMW_Black_RGB} \\
\end{center}
Die folgenden Aufgaben dienen der Wiederholung, \"Ubung und
Selbstkontrolle und sollten eigenst\"andig bearbeitet und gel\"ost
werden. Die L\"osung soll in Form eines einzelnen Skriptes (m-files)
im ILIAS hochgeladen werden. Jede Aufgabe sollte in einer eigenen
``Zelle'' gel\"ost sein. Die Zellen \textbf{m\"ussen} unabh\"angig
voneinander ausf\"uhrbar sein. Das Skript sollte nach dem Muster:
``variablen\_datentypen\_\{nachname\}.m'' benannt werden
(z.B. variablen\_datentypen\_mueller.m).
\begin{questions}
\question Implementiert folgende mathematische Funktionen als
jeweils eigene Matlab Funktionen. Diese nehmen, die
Funktionsparameter (in einem Vektor) und die x-Werte als Argumente
entgegen.
\begin{parts}
\part Die Exponentialfunktion:
\[y = \alpha \cdot e^{\frac{x}{\tau}}\]
Plottet in einem weiteren Skript eine Schar von Kurven, bei denen
das $\tau$ variiert wird. Welche Rolle spielt der Parameter?
\part Die Boltzmannfunktion:
\[\frac{\alpha}{1+e^{-k(x-x_0)}}+y_0\]
Welche Rolle spielt der Parameter $k$? Plottet eine Kurvenschar
mit ver\"andertem $k$.
\end{parts}
\question Wir haben den Gradientenabstieg f\"ur den linearen Fall
gemacht. Jetzt werden wir versuchen die Ladungskurve der Membran
einer Nervenzelle zu fitten.
\begin{parts}
\part Ladet den Datensatz \code{membrane\_voltage.mat} und plottet
die Daten.
\part Fittet mithilfe des Gradientenabstiegs folgende Funktion an
die Daten:
\[f_{A,\tau}(t) = A \cdot \left(1 - e^{-\frac{t}{\tau}}\right ) \]
An welcher Stelle im code muss etwas ge\"andert werden?
\part Plottet den Fit in die Daten.
\end{parts}
\question F\"ur die Parameteranpassung mit einem Polynom bietet
Matlab die Funktion \code{polyfit}. L\"ost unser lineares Problem
mit dieser Funktion. Plottet anschliessend die Daten samt Fit in
einen Plot.
\question Stannungsgesteuerte Ionenkan\"ale in Nervenzellen \"offnen
abh\"angig von der Membranspannung. Der Datensatz
\code{iv\_curve.mat} enth\"alt Daten von einem Voltage-Clamp
Experiment. Der \"uber die Membran fliessende Strom wurde in einem
Bereich von Membranspannungen gemessen.
\begin{parts}
\part Ladet die Daten und plottet sie.
\part Benutzt den Gradientenabstieg um die Boltzmannfunktion
(s.o.) an die Daten zu fitten. Merkt euch w\"ahrend des Abstiegs
die Fehlerwerte und plottet diese als Funktion der Schritte.
\part Benutzt den Plot der Rohdaten um m\"oglichst gute
Startparameter abzusch\"atzen.
\part Versucht schlechtere Startparameter. Was passiert?
\end{parts}
\end{questions}
\end{document}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,454 @@
\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 -- Statistik}
\author[]{Jan Grewe, Fabian Sinz\\Abteilung f\"ur Neuroethologie\\
Universit\"at T\"ubingen}
\institute[Wissenschaftliche Datenverarbeitung]{}
\date{12.10.2015 - 06.11.2015}
%\logo{\pgfuseimage{../../resources/UT_BM_Rot_RGB.pdf}}
\subject{Einf\"uhrung in die wissenschaftliche Datenverarbeitung}
\vspace{1em}
\titlegraphic{
\includegraphics[width=0.5\linewidth]{../../resources/UT_WBMW_Rot_RGB}
}
%%%%%%%%%% 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}
}
\newcommand{\code}[1]{\texttt{#1}}
\input{../../latex/environments.tex}
\makeatother
\begin{document}
\begin{frame}[plain]
\frametitle{}
\vspace{-1cm}
\titlepage % erzeugt Titelseite
\end{frame}
\begin{frame}[plain]
\huge{Curve Fitting/Optimierung mit dem Gradientenabstiegsverfahren}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{\"Ubersicht}
\begin{enumerate}
\item Das Problem: Wir haben beobachtete Daten und ein Modell, das die Daten erkl\"aren soll.
\item Wie finden wir die Parameter (des Modells), die die Daten am Besten erkl\"aren?
\item L\"osung: Anpassen der Parameter an die Daten (Fitting).
\item Wie macht man das?
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Ein 1-D Beispiel}
\begin{columns}
\begin{column}{6.25cm}
\begin{figure}
\includegraphics[width=1.\columnwidth]{one_d_problem_a.pdf}
\end{figure}
\end{column}
\begin{column}{6.5cm}
\begin{itemize}
\item z.B. eine Reihe Me{\ss}werte bei einer Bedingung.
\item Ich suche den y-Wert, der die Daten am besten
repr\"asentiert.
\item F\"ur jeden m\"oglichen y-Wert wird die mittlere
quadratische Abweichung zu allen Daten berechnet:\\
\[ error = \frac{1}{N}\sum_{i=1}^{N}(y_i - y_{test})^2 \]
\end{itemize}
\end{column}
\end{columns}\pause
Wie finde ich den besten Wert heraus?
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Ein 1-D Beispiel}
\only<1> {
\begin{columns}
\begin{column}{4.5cm}
\begin{figure}
\includegraphics[width=1.\columnwidth]{one_d_problem_b.pdf}
\end{figure}
\end{column}
\begin{column}{8cm}
\begin{itemize}
\item Man folgt dem Gradienten!
\item Der Gradient kann numerisch berechnet werden indem man ein
(sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm}
$\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$
\end{itemize}
\end{column}
\end{columns}
}
\only<2>{
\begin{columns}
\begin{column}{4.5cm}
\begin{figure}
\includegraphics[width=1.\columnwidth]{one_d_problem_c.pdf}
\end{figure}
\end{column}
\begin{column}{8cm}
\begin{itemize}
\item Man folgt dem Gradienten!
\item Der Gradient kann numerisch berechnet werden indem man ein
(sehr kleines) ``Steigungsdreieck'' an den Positionen anlegt.\\ \vspace{0.25cm}
$\frac{\Delta error}{\Delta y} = \frac{error(y+h) - error(y)}{h}$
\item Da, wo der Gradient seine Nullstelle hat, liegt der beste y-Wert.
\end{itemize}
\end{column}
\end{columns}
}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression}
\only<1-2> {
\begin{figure}
\includegraphics[width=0.45\columnwidth]{lin_regress.pdf}
\end{figure}
}
\only<2>{
Nehmen wir mal einen linearen Zusammenhang zwischen \textit{Input}
und \textit{Output} an. ($y = m\cdot x + n$)
}
\only<3> {
Ver\"anderung der Steigung:
\begin{figure}
\includegraphics[width=0.45\columnwidth]{lin_regress_slope.pdf}
\end{figure}
}
\only<4> {
Ver\"anderung des y-Achsenabschnitts:
\begin{figure}
\includegraphics[width=0.45\columnwidth]{lin_regress_abscissa.pdf}
\end{figure}
}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regresssion}
\huge{Welche Kombination ist die richtige?}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung}
\begin{columns}
\begin{column}{4.5cm}
\begin{figure}
\includegraphics[width=\columnwidth]{linear_least_squares.pdf}
\end{figure}
\footnotesize{\url{http://en.wikipedia.org/wiki/Linear_least_squares_(mathematics)}}
\end{column}
\begin{column}{7cm}
\begin{enumerate}
\item Die am h\"aufigstern Angewandte Methode ist die der
kleinsten quadratischen Abweichungen.
\item Es wird versucht die Summe der quadratischen Abweichung zu
minimieren.
\end{enumerate}
\[g(m,n) = \frac{1}{N}\sum^{N}_{1=1} \left( y_i - f_{m, n}(x_i)\right )^2\]
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichun}
\begin{itemize}
\item Was heisst das: Minimieren der Summe der kleinsten
quadratischen Abweichungen?
\item Kann man einen Algortihmus zur L\"osung des Problems
erstellen?
\item Kann man das visualisieren?
\end{itemize}\pause
\begin{columns}
\begin{column}{5.5cm}
\tiny
\begin{lstlisting}
x_range = linspace(-1, 1, 20);
y_range = linspace(-5, 5, 20);
[X, Y] = meshgrid(x_range, y_range);
Z = X.^2 + Y.^2;
surf(X, Y, Z);
colormap('autumn')
xlabel('x')
ylabel('y')
zlabel('z')
\end{lstlisting}
\end{column}
\begin{column}{5.5cm}
\begin{figure}
\includegraphics[width=0.9\columnwidth]{surface.pdf}
\end{figure}
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung}
\textbf{Aufgabe}
\begin{enumerate}
\item Ladet den Datensatz \textit{lin\_regression.mat} in den
Workspace. Wie sehen die Daten aus?
\item Schreibt eine Funktion \code{lsq\_error}, die den Fehler
brechnet:
\begin{itemize}
\item \"Ubernimmt einen 2-elementigen Vektor, der die Parameter
\code{m} und \code{n} enth\"alt, die x-Werte und y-Werte.
\item Die Funktion gibt den Fehler zur\"uck.
\end{itemize}
\item Schreibt ein Skript dass den Fehler in Abh\"angigkeit von
\code{m} und \code{n} als surface plot darstellt (\code{surf}
Funktion).
\item Wie k\"onnen wir diesen Plot benutzen um die beste Kombination
zu finden?
\item Wo lieft die beste Kombination?
\end{enumerate}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Methode der kleinsten quadratischen Abweichung}
\begin{itemize}
\item Wie findet man die Extrempunkte in einer Kurve?\pause
\item Ableitung der Funktion auf Null setzen und nach x aufl\"osen.
\item Definition der Ableitung:\\ \vspace{0.25cm}
\begin{center}
$ f'(x) = \lim\limits_{h \rightarrow 0} \frac{f(x + h) - f(x)}{h} $
\vspace{0.25cm}\pause
\end{center}
\item Bei zwei Parametern $g(m,n)$ k\"onnen wie die partielle
Ableitung bez\"uglich eines Parameters benutzen um die
Ver\"anderung des Fehlers bei Ver\"anderung eines Parameters
auszuwerten.
\item Partielle Ableitung nach \code{m}?\\\pause
\vspace{0.25cm}
\begin{center}
$\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow 0} \frac{g(m + h, n) - g(m,n)}{h}$
\vspace{0.25cm}
\end{center}
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Gradientenabstieg}
\large{Der Gradient:}
\begin{center}
$\bigtriangledown g(m,n) = \left( \frac{\partial g(m,n)}{\partial m}, \frac{\partial g(m,n)}{\partial n}\right)$
\end{center}
Ist der Vektor mit den partiellen Ableitungen nach \code{m} und
\code{n}.
\pause Numerisch kann die Ableitung durch einen sehr kleinen Schritt
angen\"ahert werden.
\begin{center}
$\frac{\partial g(m,n)}{\partial m} = \lim\limits_{h \rightarrow
0} \frac{g(m + h, n) - g(m,n)}{h} \approx \frac{g(m + h, n) -
g(m,n)}{h}$
\end{center}
f\"ur sehr kleine Schritte \code{h}.
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Gradientenabstieg}
Plotten des Gradientenfeldes:
\begin{itemize}
\item Ladet die Daten in \code{lin\_regession.mat}.
\item Schreibt eine Funktion \code{lsq\_gradient.m} in dem gleichen
Muster wie \code{lsq\_error.m}. Die Funktion berechnet
den Gradienten an einer Position (Kombination von Parametern),
wenn ein kleiner Schritt gemacht wird (\code{h=1e-6;}).
\item Variiert \code{m} im Bereich von -2 bis +5 und \code{n} im
Bereich -10 bis 10.
\item Plottet die Fehlerfl\"ache als \code{surface} und
\code{contour} plot in die gleiche Abbildung.
\item F\"ugt die Gradienten als \code{quiver} plot hinzu.
\item Was sagen die Pfeile? Wie passen Pfeile und Fl\"ache zusammen?
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Lineare Regression - Gradientenabstieg}
\begin{itemize}
\item Der Gradient zeigt in die Richtung des gr\"o{\ss}ten \textbf{Anstiegs}. \pause
\item Wie kann der Gradient nun dazu genutzt werden zum Minimum zu kommen?\pause
\item \textbf{Man nehme: $-\bigtriangledown g(m,n)$!}\pause
\vspace{0.25cm}
\item Wir haben jetzt alle Zutaten um den Gradientenabstieg zu formulieren.
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Gradientenabstieg - Algorithums}
\begin{enumerate}
\item Starte mit einer beliebigen Parameterkombination $p_0 = (m_0,
n_0)$.
\item Wiederhole solange wie die der Gradient \"uber einer
bestimmten Schwelle ist:
\begin{itemize}
\item Berechne den Gradienten an der akutellen Position $p_t$.
\item Gehe einen kleinen Schritt in die entgegensetzte Richtung des
Gradienten:\\
\begin{center}
$p_{t+1} = p_t - \epsilon \cdot \bigtriangledown g(m_t, n_t)$
\end{center}
wobei $\epsilon$ eine kleine Zahl (0.01) ist.
\end{itemize}
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Gradientenabstieg - \"Ubung}
\begin{enumerate}
\item Implementiert den Grandientenabstieg f\"ur das Fitten der
linearen Geradengleichung an die Daten.
\item Plottet f\"ur jeden Schritt den surface plot und die aktuelle
Position als roten Punkt (nutzt \code{plot3}).
\item Plottet f\"ur jeden Schritt den Fit in einen separaten plot.
\item Nutzt \code{pause(0.1)} nach jedem Schritt um die Entwicklung
des Fits zu beobachten.
\end{enumerate}
\end{frame}
\begin{frame}
\frametitle{Fitting und Optimierung}
\framesubtitle{Gradientenabstieg - \"Ubung II}
\begin{columns}
\begin{column}{6cm}
\begin{figure}
\includegraphics[width=1\columnwidth]{charging_curve.pdf}
\end{figure}
\end{column}
\begin{column}{7cm}
\begin{itemize}
\item Ladet die Daten aus der \code{membraneVoltage.mat}.
\item Plottet die Rohdaten.
\item Fittet folgende Funktion an die Daten:\\
\begin{center}
$f_{A,\tau}(t) = A \cdot \left(1 - e^{-\frac{t}{\tau}}\right )$
\end{center}
\item An welcher Stelle muss der Code von oben ver\"andert
werden?
\item Plottet die Daten zusammen mit dem Fit.
\end{itemize}
\end{column}
\end{columns}
\end{frame}
\begin{frame}[fragile]
\frametitle{Fitting und Optimierung}
\framesubtitle{Fitting mit Matlab}
\begin{itemize}
\item Es gibt mehrere Funktionen in Matlab, die eine Optimierung
automatisch durchf\"uhren.
\item z.B. \code{fminunc, lsqcurvefit, fminsearch, lsqnonlin, ...}
\item Einige der Funktionen stecken allerdings in der
\textit{Optimization Toolbox}, die nicht zum Standard Matlab
geh\"ort.
\end{itemize}
\begin{lstlisting}
function param = estimated_regression(x, y, start_parameter)
objective_function = @(p)(lsq_error(p, x, y));
param = fminunc(objective_function, start_parameter)
\end{lstlisting}
\end{frame}
\end{document}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.