WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Geschwindigkeit Simulation von stochastischen Prozessen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.12.2012, 12:23     Titel: Geschwindigkeit Simulation von stochastischen Prozessen
  Antworten mit Zitat      
Hallo zusammen!

Ich möchte Aktienkurse mit Matlab mit folgendem Code simulieren:

s0=100
mu=0.00
mu=0.001
sigma=0.3
t=50
dt=1/t
n=50
s=zeros(t,n)
epsilon=randn(t,n)
for k=1:n
s(1,k)=s0
for i=2:t
s(i,k)=s(i-1,k)*mu*dt+s(i-1,k)*sqrt(dt)*sigma*epsilon(i,k)+s(i-1,k)
end
end

Für n=50 und t=50 geht das boch einigermassen schnell, vewende ich allerdings eine höhere Frequenz und mehr Pfade (n=10000, t=2000), scheint die Simulation kein Ende mehr zu nehmen.

Kann man die Sache irgendwie beschleunigen?

Vielen Dank für Eure Hilfe!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 25.12.2012, 17:32     Titel: Re: Geschwindigkeit Simulation von stochastischen Prozessen
  Antworten mit Zitat      
Hallo,

Eine einfache, aber grundlegend wichtige Regel für Matlab und alle anderen Programmiersprachen auch, ist das Vermeiden aller wiederholten Berechnungen. In Deinem Beispiel wäre es effizienter "sqrt(dt) * sigma" und "mu * dt" nur einmal ausserhalb der Schleifen zu berechnen.
Dann benötigt das Indizieren ebenfalls Zeit, so dass man dies so selten wie möglich macht. Hier wäre dies das Ausklammern von "s(i-1, k)".

Die Ausgabe ins Command-Window benötigt eine Menge Zeit. Da man dies aber wohl kaum benötigt, lässt man dies besser weg, indem man ein Semikolon anfügt:
Code:
s0 = 100;
mu = 0.00;
mu = 0.001;
sigma =0.3;
t = 50;
dt = 1/t;
n = 50;
s = zeros(t, n);
epsilon = randn(t, n);
c1 = mu * dt;
c2 = sqrt(dt) * sigma;
for k=1:n
  s(1,k) = s0;
  for i = 2:t
    s(i,k) = s(i-1,k) * (c1 + c2 * epsilon(i,k) + 1);
  end
end

Das starten der inneren Schleife benötigt Zeit. Wenn man zwei von einander unabhängige geschachtelte Schleifen hat, nimmt man die kürzere nach aussen. Das überlasse ich Dir.

Der nächste Schritt wäre es eine Vektorisierung zu versuchen. Matlab kann nämlich effizient mit Vektoren und Matrizen rechnen:
Code:
...
s(1, :) = s0;
for i = 2:t
  s(i, :) = s(i-1,  :) * (c1 + c2 * epsilon(i, :) + 1);
end

Oder als Matrix-Berechnung:
Code:
...
s = c1 + c2 * epsilon + 1;
s(1, :) = s0;
s = cumprod(s, 2);

Leider kann ich das gerade nicht testen. Das Prinzip sollte aber klar geworden sein, so dass Du das selbst debuggen kannst.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.12.2012, 16:32     Titel: Re: Geschwindigkeit Simulation von stochastischen Prozessen
  Antworten mit Zitat      
Das klappt ja super gut!!

Danke vielmals, very nice!
 
bella9091
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 27.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.12.2012, 07:50     Titel:
  Antworten mit Zitat      
Hallo du hast eine sehr schöne Aufgabe hier ...
Vielen Dank für diese ... keep it up.
_________________

Bella
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.