Traçando um movimento browniano com linha tracejada indicando os valores

Traçando um movimento browniano com linha tracejada indicando os valores

Quero fazer um gráfico semelhante ao abaixo em LaTeX (por meio do TikZ ou de outra coisa). Já encontrei um método para traçar o caminho browniano. Porém, não sei como adicionar as linhas tracejadas mostradas na imagem abaixo. Essas linhas são feitas quando o caminho browniano atinge um valor específico e os rótulos serão letras em vez de números. Obrigado!

Um exemplo

Na verdade, o método para traçar o caminho browniano que encontrei está aqui: Como desenhar movimentos brownianos em tikz/pgf

Não preciso adicionar limite superior ou inferior como nas respostas desse link. Mas preciso adicionar algumas linhas tracejadas para alguns valores específicos.

Responder1

Aqui está uma tentativa usandoMetapostembrulhado emluamplib. Compile com lualatex, siga os links para mais detalhes.

insira a descrição da imagem aqui

\RequirePackage{luatex85}
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\begin{document}
\mplibtextextlabel{enable}
\begin{mplibcode}
beginfig(1);

% set a seed, so it is repeatable (it will work fine if you 
% delete this, but you will get a different path...)
randomseed := 1288.27463;

numeric a, u, v, wt, N, hi, lo;
% parameters
a = 0;
N = 100;
lo = -hi = infinity;
wt = 2/5; % weight - larger = more random

% scales
u = 1mm; % scale
v = 1cm;

% make the brownian path, keeping track of the hi and lo points
% you could use uniformdeviate or calculate a more complicated
% distribution here instead of "normaldeviate"
path A;
A = (origin for t=1 upto N: 
        hide( 
            if a>hi: hi := a; fi if a<lo: lo := a; fi 
            a := a + wt * normaldeviate; 
        )
        -- (t,a) 
     endfor) xscaled u yscaled v;

% draw in the axes nicely
drawoptions(withcolor 1/2 white);
draw ((0,lo)--(0,hi)) scaled v;
for i=ceiling(lo) upto floor(hi) : 
    draw (left--right) scaled 2 shifted (0,i*v);
    label.lft("$" & decimal i & "$", (0,i*v)); 
endfor
draw (origin--right) scaled (N*u);

% draw the markers at the desired points along the brownian motion path
drawoptions(dashed evenly scaled 1/2 withcolor 2/3 blue);

z0 = point 44 of A; 
draw (x0,-16) -- z0 -- (-16,y0); 
label.bot("$T_0$", (x0,-16));
label.lft("$M_0$", (-16,y0));

z1 = point 81 of A; 
draw (x1,-16) -- z1 -- (-16,y1); 
label.bot("$T_1$", (x1,-16));
label.lft("$M_1$", (-16,y1));

% etc...

% finally draw the path on top of everything else
drawoptions(withcolor 2/3 red);
draw A;

drawoptions();
endfig;
\end{mplibcode}
\end{document}

informação relacionada