Beispiel zur Brownschen Brücke

AKVFM Numerische Methoden der Finanz- und Versicherungsmathematik

TU Wien, SS 2006, Reinhold Kainhofer

Definition der BB

<< Statistics`NormalDistribution`
<< Graphics`

$TextStyle = {FontFamily -> "Helvetica"};

BBridgeInter[{{s_, xs_},  {u_,  xu_}}] := 
        BBridgeInter[{s, xs},  {u,  xu}];
BBridgeInter[{s_, xs_},  {u_,  xu_}] := 
      Module[{t = ((u + s)/2)}, 
{t, 
          xs +  ((t - s)/(u - s)) (xu - 
                  xs) +  (Sqrt[(((u - t) (t - s))/(u - s))]) 
              Random[NormalDistribution[0, 
                  1]]}
]

ClearAll[vals];

Anfangs- und Endpunkt

vals[i_Integer] /; 
          i == 0 := vals[
            0] = {{0. , 
              0. },  {10. , (Sqrt[10]) Random[
                  NormalDistribution[0, 1]]}};

Rekursive Definition durch Intervallhalbierung

vals[i_Integer] /; i > 0 := vals[i] = 
          Module[{SSS, res, 
              vvv}, 
res = SSS[#[[1]],  
                    BBridgeInter[#]] & /@ 
                Partition[vals[i - 1], 2, 1]; 
AppendTo[
                res,  Last@vals[i - 1]] /. 
              SSS[vvv___] :> 
                Sequence[vvv]
];

Werte zuruecksetzen, um neuen Pfad zu erzeugen (die Werte werden ja zwischengespeichert)

resetVals[i_Integer] := 
        Module[{}, 
(vals[#] =. ) & /@ 
              Range[0, i];
];

resetVals[10]

Die Werte, rekursiv

vals[1]
vals[2]
vals[3]

recursionDepth = 10;
range = {Min[#],  Max[#]} &[
          Last /@ (Join @@ (vals /@ 
                    Range[0, recursionDepth]))];

plots = ListPlot[vals[#], PlotRange -> range,  
              PlotJoined -> True, 
              DisplayFunction :> Identity,  
              PlotStyle -> {RGBColor[Random[],  Random[],  
                    Random[]]}] & /@ Range[0, recursionDepth];

Show@
        GraphicsArray[Partition[plots, 2],  GraphicsSpacing -> 0, 
          ImageSize -> 600];

Show@
        GraphicsArray[
          Partition[Show[Take[plots,  #]] & /@ Range[recursionDepth],  
            2],  GraphicsSpacing -> 0, 
          ImageSize -> 600];

Show[Take[plots,  #],  
            DisplayFunction :> $DisplayFunction] & /@ 
        Range[recursionDepth];

Show[plots,  
        DisplayFunction :> $DisplayFunction];

Show[#,  DisplayFunction :> $DisplayFunction] & /@ 
        Prepend[Partition[plots,  2,  1],  plots[[1]]];

Show@
        GraphicsArray[
          Partition[
            Show /@ Prepend[Partition[plots,  2,  1],  plots[[1]]],  
            2],  GraphicsSpacing -> 0,  
          ImageSize -> 600];

Alle Werte löschen, damit neuer Pfad erstellt wird:

resetVals[recursionDepth]