2016-05-18 9 views
0

Ich möchteIntegral von normCDf in Matlab

berechnen
$$e_0=r*K \int_{0}^{T} \exp{(-rt)} N\bigg(\frac{\ln{(B_t/S_0)}-e_2 t}{\sigma \sqrt{t}} \bigg)dt,$$ 

wo

$$e_2=r-\frac{\sigma^2}{2},$$

und

$$N(x)=\int_{0}^{x} \frac{\exp{(-z^2/2)}}{\sqrt{2\pi}}dz$$ 

die Standard-Normalverteilungsfunktion oder normCDf in Matlab ist.

Es sind r, K, T, B_t, S_0, und sigma angegeben. Hier ist mein Code:

K=90.054 
r=0.075 
sigma=0.2964203 
T=1 
Bt=66.0377 
S0=206.67 
syms t 
e0=r*K*int(exp(-r*t)*normcdf((log(Bt/S0)-(r-(sigma^2)/2)*t)/(sigma*sqrt(t))),t,0,T) 

Allerdings, wenn ich es laufen, ist das Ergebnis immer noch in der Variablen t:

e0 = 

(7604384265810425*int((erfc((9007199254740992*2^(1/2)*((279831188732951*t)/9007199254740992 + 642268209798613/562949953421312))/(5339833410500203*t^(1/2)))*exp(-(3*t)/40))/2, t, 0, 1))/1125899906842624 

Die erste Formel ist die frühzeitige Ausübung Prämie für amerikanische Put-Option in Carr et al Papier und damit das Ergebnis sollte numerisch sein, aber das Ergebnis, das ich bekam, ist nicht. Irgendeine Idee, was habe ich falsch gemacht?

Antwort

0

Ich nehme an, Ihr Fehler liegt in der Verwendung von int. Sie haben integral Funktion stattdessen auf diese Weise verwenden:

K=90.054 
r=0.075 
sigma=0.2964203 
T=1 
Bt=66.0377 
S0=206.67 
syms t 
e0 = r*K*integral(@(t) normcdf((log(Bt/S0)-(r-(sigma^2)/2)*t)./(sigma*sqrt(t))),0,T) 

Es einzelnen Wert zurückgibt:

e0 = 
    2.7014e-05 
+0

Ja, danke für die Antwort! Ich benutze normalerweise int, weil es in Matlab 2010 in meinem Notebook gut funktioniert, aber ich habe gerade Matlab 2015 in meinem neuen Laptop installiert. –