Chemist_MZ 发表于 2015-7-15 07:56
你的边界条件没选对,对于up in 的call你的边界条件应该是
股价是零的时候为0:v(0,t)=0, 0
谢谢您的答复,我想了很久,可是我还是有点不清楚的地方可以请您继续讲解下吗?
1, 我按照您的意思做了如下修改:(其中B=Sb/ds,即障碍值所处位置)
①. 将网格范围改为(0,Smax);
②. 将边界条件改为:
biprice(1:B,end)= 0; %到期时刻的S<Sb的期权价值=0
biprice(B+1:end,end)= max( svec(B+1:end)-K ,0); %到期时刻S≥Sb,即期权敲入后的期权到期时的价值
biprice(1,:) = 0; %S=0时的期权价格
biprice(end,:) = (svec(end)-K )*exp(-r*tvec(end:-1:1)); %期权价格为Smax的时候
运算出来终于不是NAN了,可是离正确答案还差一点距离,请问这样哪里错了呢?
修改后的代码为:
clear
S0 = 145;
Sb=160;
K = 145;
r = 0.06;
T = 0.5;
sigma = 0.295;
Smax = 200;
otype=CALL
dS=2;
dT=5/10000;
%建立网格
M=round(Smax/dS);
ds=(Smax)/M;
B=Sb/ds;
N=round(T/dT);
dt=T/N;
svec=linspace(0,Smax,M+1)';
tvec=linspace(0,T,N+1);
i=svec/ds;
%建立三角矩阵(系数矩阵)
sig2 = sigma*sigma;
alpha = 0.25*dt*( sig2*(i.^2) - r*i );
beta = -dt*0.5*( sig2*(i.^2) + r );
gamma = 0.25*dt*( sig2*(i.^2) + r*i );
%初始化矩阵
biprice=zeros(M+1,N+1);
%将三角矩阵赋值
M1=diag(-alpha(3:M),-1) + diag(1-beta(2:M)) + diag(-gamma(2:M-1),1);
M2=diag(alpha(3:M),-1) + diag(1+beta(2:M)) + diag(gamma(2:M-1),1);
%边界条件
biprice(1:B,end)= 0; %到期时刻的S<Sb的期权价值=0
biprice(B+1:end,end)= max( svec(B+1:end)-K ,0); %到期时刻S≥Sb,即期权敲入时的期权价值
biprice(1,:) = 0; %S=Sb时的期权价格
biprice(end,:) = (svec(end)-K )*exp(-r*tvec(end:-1:1)); %期权价格为Smax的时候
%计算矩阵
for q=N:-1:1
biprice(2:end-1,q) = M1\(M2*biprice(2:end-1,q+1));%排除已知的边界条件的情况
end
oprice1=interp1(svec,biprice(:,1),S0)
2.还有一个问题:因为我当时看书的时候说向下敲出的范围也是(sb, smax),这样的话svec也没有包括s0,但是为什么这个算出来就是对的呢? 是因为敲入和敲出有什么区别吗?
因为我不是这个专业的学生,自己也是摸索着学习。可能问题比较繁琐哈~~
麻烦了!! 谢谢!!!