Professional Documents
Culture Documents
a) Considere una opcin call, con valor mximo para de tiempo de madurez T. Sea
S = Sm ax ,
strike price
E =
Cnum (S, t)
mtodo de
1 S ax y 2 m
0 S Sm ax CBS (S, t)
0tT C (S, t)
como la diferencia de ambas
C (S, t) es el error que se comete en cada punto entre la solucin exacta y la numrica. Sm ax y T. Estudie ahora el comportamiento funcin C (S, t) cuando el ancho de la red discreta numrica disminuye para al menos
10 casos distintos (es decir, 10 redes ordenadas por tamao de ancho de red decreciente). Graque
C (S, t) en cada caso. Disminuye siempre C (S, t) cuando el ancho de la red decrece?, existe un ancho de red para el cual la funcin C (S, t) tiene el menor valor posible?, es decir,
si se dene
Existe un ancho
0 t T}
(S ).
C en el problema (a) obtenga una solucin Utilizando la misma red que minimiza CN (S, t) por medio del mtodo de Crank-Nicholson. numrica para O CN Graque O (S, t) en este caso tambin.
num
num
(S) 6
h=
1 S ax 2 m 3 S 4 max 1 S ax 4 m
\ \ \ \ \ h \ \ \ \
a b
b=
a=
2.
Respuestas
(2.1) (2.2)
(2.3) (2.4)
Como vamos a trabajar con Matlab transformamos la ecuacin 2.2 para trabajar con facilidad, para esto usamos la funcin error
2 erf (x) =
x 0
eu du
(2.5)
Esta ecuacin 2.5 nos ayudara a describir una distribucin normal, y es nativa de Matlab. Por lo tanto se escribe 2.2 de la siguiente manera
N ( x) =
1 1 + erf 2
x 2
(2.6)
Ahora escribimos el cdigo para gracar 2.1, usando los siguientes valores: Parmetro Valor 0.02 0.25 100 2 50 Descripcin Taza de inters Volatilidad Valor mximo Tiempo de expiracin Strike Price
r Sm ax T K
(2.7)
Los parmetros
As , Bs
Cs
estn a continuacin:
As = 0,5 dt ( 2 s2 r s) Bs = [1 ( 2 s2 )] Cs = 0,5 dt ( 2 s2 + r s)
Para iterar est funcin necesitamos condiciones de borde para
Vst+1
VsT = m ax(s K, 0) t V0 = 0
t r(T t) VS = Sm ax K e m ax
Finalmente el cdigo para obtener la solucin exacta y la solucin numrica es:
%Parmetros Iniciales r=0.02; sigma=0.25; Smax=100; T=2; K=Smax/2; dT=1000; % Puntos para el tiempo dS=100; % Puntos para el valor dt=(T/dT); % Paso para el tiempo ds=(Smax)/dS; % Paso para los valores t=0; S=0; for i=1:dS % Solucin exacta d1(i) = (log(S/K) + (r + 0.5sigma^2)(Tt))/(sigmasqrt(Tt)); d2(i) = d1(i) sigmasqrt(Tt); N1(i) = 0.5(1+erf(d1(i)/sqrt(2))); N2(i) = 0.5(1+erf(d2(i)/sqrt(2))); val(i) = S.N1(i) K.exp(r(Tt)).N2(i); S=S+ds;
end
val=val'; % Transpuesta de la matriz v(1:dS,1:dT) = 0.0; % Iniciar matriz de valores %Condiciones iniciales v(1:dS,1)=max(((0:dS1)dsK),zeros(size(1:dS)))'; v(dS,2:dT)=(dSds)Kexp(r(T((1:dT1)dt))); %Clculo de parmetros A, B y C, para todo s aa=0.5dt(sigma^2(1:dS2).(1:dS2)(r)(1:dS2))'; bb=1dt(sigma^2(1:dS2).(1:dS2)+r)'; cc=0.5dt(sigma^2(1:dS2).(1:dS2)+(r)(1:dS2))';
v(2:dS1,i)=bb.v(2:dS1,i1)+cc.v(3:dS,i1)+aa.v(1:dS2,i1);
El paso en que se transponen la matrices es solo para trabajar los datos de una manera cmoda, por ejemplo, para la solucin exacta Matlab la entrega como una matriz de y es mejor trabajarla como un vector de
dS 1,
1 dS .
dS
dT ,
C .
En la tabla se
Puntos del tiempo 1000 2000 2000 90 2000 2000 500 1000 399 9000
C
1.0876 1.3683 1.1405 1.0297 0.7291 0.5474 1.5288 0.5464 0.5431 1.1413
Para nalizar se ve claramente que el tamao de grilla para el cual es error mximo es mnimo es para
dS = 62
dT = 399.
b) Implementar un algoritmo de Crank-Nicholson es un poco complicado ya que hay que invertir una matriz y muchas veces se hace difcil escribir el algoritmo que lo haga, para el caso de Crank-Nicholson la ecuacin para iterar es:
(2.8)
dt 4
S S2 r ds ds
dt 2
S2 +r ds
dt 4
S S2 +r ds ds
El siguiente paso es escribir esto en forma de ecuacin matricial y luego resolver. El cdigo en Matlab es:
K=50; r=0.02; T=2; sig=0.25; Smax=100; N=62; M=399; Ds =Smax/N; Dt=T/M; ME=zeros(N,N); MI=zeros(N,N); S=1Ds:Ds:Smax; V=zeros(N,1); matsol=zeros(N,M); a=round(N/4); b=round(3N/4); V(a:round(N/2))=0:K/(round(N/2)a):K; V(round(N/2):b)=K:K/(round(N/2)b):0; matsol(:,1)=V;
for i=1:1:N
Alpha = 0.5(sig^2)(S(i)^2)(Dt/(Ds^2)); Betha = (r)S(i)(Dt/(2Ds)); Bde = Alpha Betha; De = 1rDt2Alpha; Ade = Alpha + Betha; Bdi= Alpha + Betha; Di= 1+rDt+2Alpha; Adi= Alpha Betha; if i==1 ME(i,i) = 1 + De + 2Bde; ME(i,i+1) = Ade Bde; MI(i,i) = 1 + Di + 2Bdi; MI(i,i+1) = Adi Bdi;
6
ME(i,i1) = Bde Ade; ME(i,i) = 1 + De + 2Ade; MI(i,i1) = Bdi Adi; MI(i,i) = 1 + Di + 2Adi; ME(i,i1) = Bde; ME(i,i) = 1 + De; ME(i,i+1) = Ade; MI(i,i1) = Bdi; MI(i,i) = 1 + Di; MI(i,i+1) = Adi;
invMI = MI^1;
[1] Normal
distributions/normal.php.
http://www.alglib.net/specialfunctions/
Diciembre 2013