
Ich versuche, die Brownsche Bewegungsdarstellung auf dem Cover von Bernt Øksendals Lehrbuch nachzubildenStochastische Differentialgleichungenmit LaTeX.
Ich bin ein bisschen verloren beim Kodieren. Es ist keine Mathematik erforderlich. Ich habe ein ähnliches Thema nachgeschlagen (Brownsche Bewegung - Duplikat), aber keines davon hatte eine E[X_t]-Linie im Diagramm. Außerdem war ich mir nicht sicher, wie ich die Brownschen Bewegungsbahnen (da einige von ihnen ins Negative gehen, anders als im Lehrbuch-Cover-Diagramm) und die Beschriftung der x- und y-Achse korrigieren sollte.
Mein Versuch
\documentclass[12pt, a4paper]{article} %uploading the libraries
\usepackage{pgfplots, pgfplotstable}
\usepackage[font=small,labelfont=bf,labelsep=colon]{caption}
\begin{document}
\pgfmathsetseed{5}
% creating the Brownian motion trajectories
\pgfplotstablenew[
create on use/randwalk1/.style={
create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
},
create on use/randwalk2/.style={
create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
},
create on use/randwalk3/.style={
create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
},
create on use/randwalk4/.style={
create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
},
create on use/randwalk5/.style={
create col/expr accum={\pgfmathaccuma + 0.1*rand}{0}
},
columns={randwalk1,randwalk2,randwalk3,randwalk4,randwalk5}
]
{700}
% adjusting the plot axes and titles
\loadedtable
\begin{figure}[H]
\caption{Brownian Motion}
\centering
\begin{tikzpicture}
\begin{axis}[
legend pos=outer north east,
axis y line=left,
axis x line=middle,
xlabel= {\scriptsize $t$},
ylabel = {\scriptsize $X_{t}$},
ylabel style = {yshift=-12pt},
xticklabels={,,},
yticklabels={,,},
tick style={draw=none},
line join=bevel,
no markers,
table/x expr={\coordindex/100},
xmin=0,
ymin=-0.5, ymax=3,
enlarge x limits=false
% now, putting it all together
]
\addplot table [y expr={max(\thisrow{randwalk1},-5.0)}] {\loadedtable};
\addplot table [y expr={min(\thisrow{randwalk2},5.0)}] {\loadedtable};
\addplot table [y expr={min(\thisrow{randwalk3},5.0)}] {\loadedtable};
\addplot table [y expr={min(\thisrow{randwalk4},5.0)}] {\loadedtable};
\addplot table [y expr=\thisrow{randwalk5}] {\loadedtable};
\draw (axis cs:5,5) (axis cs:5,-5);
\legend {{\footnotesize $X_t(\omega_1)$}, {\footnotesize $X_t(\omega_2)$}, {\footnotesize $X_t(\omega_3)$},{\footnotesize $X_t(\omega_4)$},{\footnotesize $X_t(\omega_5)$}};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}
Antwort1
Die Sache ist, dass rand
in pgf
einen gleichmäßig verteilten Zufallswert auf generiert [-1,1]
und keinen normalen Zufallswert. Der folgende Code stellt also strenggenommen kein GBM-Diagramm dar. Aber es sieht einem GBM-Diagramm ähnlich. Sie können sehen, dass ich auch etwas Drift 0.003
im Exponenten hinzugefügt habe, um Trajektorien wahrscheinlicher zu machen, die ähnlich wie in der Originalfigur ansteigen. Und da rand
gleichmäßig ist, habe ich diesen Ausdruck berechnet E(exp(0.003+0.1*rand))=exp(0.003)*5*(exp(0.1)-exp(-0.1))
und verwende ihn, um die Erwartung darzustellen.
\documentclass[12pt, a4paper]{article} %uploading the libraries
\usepackage{pgfplots, pgfplotstable}
\usepackage[font=small,labelfont=bf,labelsep=colon]{caption}
\begin{document}
\pgfmathsetseed{5}
% creating the Brownian motion trajectories
\pgfplotstablenew[
create on use/randwalk1/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003+0.1*rand)}{1}
},
create on use/randwalk2/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003+0.1*rand)}{1}
},
create on use/randwalk3/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003+0.1*rand)}{1}
},
create on use/randwalk4/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003+0.1*rand)}{1}
},
create on use/randwalk5/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003+0.1*rand)}{1}
},
create on use/expectation/.style={
create col/expr accum={\pgfmathaccuma * exp(0.003)*5*(exp(0.1)-exp(-0.1))}{1}
},
columns={randwalk1,randwalk2,randwalk3,randwalk4,randwalk5,expectation}
]
{700}
% adjusting the plot axes and titles
\loadedtable
\begin{figure}[h]
\caption{Brownian Motion}
\centering
\begin{tikzpicture}
\begin{axis}[
legend pos=outer north east,
axis y line=left,
axis x line=middle,
xlabel={\scriptsize $t$},
ylabel={\scriptsize $X_{t}$},
ylabel style={yshift=-12pt},
xticklabels={,,},
yticklabels={,,},
tick style={draw=none},
line join=bevel,
no markers,
table/x expr={\coordindex/100},
xmin=0,
ymin=0,
enlarge x limits=false
]
\addplot table [y expr=\thisrow{randwalk1}] {\loadedtable};
\addplot table [y expr=\thisrow{randwalk2}] {\loadedtable};
\addplot table [y expr=\thisrow{randwalk3}] {\loadedtable};
\addplot table [y expr=\thisrow{randwalk4}] {\loadedtable};
\addplot table [y expr=\thisrow{randwalk5}] {\loadedtable};
\addplot table [y expr=\thisrow{expectation}] {\loadedtable};
\draw (axis cs:5,5) (axis cs:5,-5);
\legend {{\footnotesize $X_t(\omega_1)$},
{\footnotesize $X_t(\omega_2)$},
{\footnotesize $X_t(\omega_3)$},
{\footnotesize $X_t(\omega_4)$},
{\footnotesize $X_t(\omega_5)$},
{\footnotesize $E[X_t]$}};
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}