各位大大好,我是刚刚开始学习matlab的菜鸟一只,在使用bisection method 计算美式期权的implied volatility时 程序总是显示出错,美式期权的计算式要求用binomial tree计算的,请各位高手帮忙看一下程序~
function impval=F1(P,S,K,r,T,delta,N)
%set the upper bound and lower bound of the sigma
ubound=2;
lbound=1;
sigma=0.5*(ubound+lbound);
%precompute invariant quantities
deltaT=T/N;
u=exp((r-delta)+sigma*sqrt(deltaT));
d=1/u;
p=(exp((r-delta)*deltaT)-d)/(u-d);
discount=exp(-r*deltaT);
p_u=discount*p;
p_d=discount*(1-p);
%set up S value
SVals=zeros(2*N+1,1);
SVals(N+1)=S;
for i=1:N
SVals(N+1+i)=u*SVals(N+i);
SVals(N+1-i)=d*SVals(N+2-i);
end
%set up terminal values
PVals=zeros(2*N+1,1);
for i=1:2:2*N+1
PVals=max(K-SVals(i),0);
end
%work backward
for tau=1:N
for i=(tau+1):2:(2*N+1-tau);
PVals(i)=max(p_u*PVals(i+1)+p_d*PVals(i-1), K-SVals(i));---显示此处错误为Attempted to access PVals(3); index out of bounds because numel(PVals)=1.
end
end
CP=PVals(N+1);
%set some variant
tol=1e-4;%the tolernce of the error
iter=0;
iter_max=1000;
diff=CP-P;
while abs(diff)>tol && iter<iter_max
if(diff<0)
sigma=lbound;
elseif(diff>0)
sigma=ubound;
else
sigma=0.5*(ubound+lbound);
end
iter=iter+1;
end
impval=sigma;
估计整个程序也有很大的问题,希望大家能够指点一下~