matlab运行出错
来源:百度知道 编辑:UC知道 时间:2024/05/05 05:38:16
function pm(CP,S,X,T,r,v,D1,D1T,D2,D2T)
S1=S-D1*exp(-r*D1T)-D2*exp(-r*D2T);
X2=X-D2;
X1=X-D1-D2*exp(-r*(D2T-D1T));
d1=(log(S1/X)+(r+v^2/2)*T)/(v*sqrt(T));
d2=d1-v*sqrt(T);
P1=S1*normcdf(d1)-X*exp(-r*T)*normcdf(d2);
d11=(log(S1/X1)+(r+v^2/2)*D1T)/(v*sqrt(D1T));
d21=d11-v*sqrt(D1T);
P2=S1*normcdf(d11)-X1*exp(-r*D1T)*normcdf(d21);
d12=(log(S1/X2)+(r+v^2/2)*D2T)/(v*sqrt(D2T));
d22=d12-v*sqrt(D2T);
P3=S1*normcdf(d12)-X2*exp(-r*D2T)*normcdf(d22);
P4=max(P1,P2);
P=max(P3,P4);
if CP=='c'
P
else
0
end
当我在COMMAND WINDOW中 输入 >> pm('c',1,1,1,1,1,1,1,1,1)
报错:
??? Error using ==> erfcore
Input must be real.
Error in ==> erfc at 23
y = erfcore(x,1);
Error in ==> normcdf at 68
p = 0.5 * erfc(-z ./ sqrt(2));
Error in ==> pm at 13
P2=S1*normcdf(d11)-X1*e
在Matlab下输入:edit,然后将下面两行百分号之间的内容,复制进去,保存
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function pm(CP,S,X,T,r,v,D1,D1T,D2,D2T)
S1=S-D1*exp(-r*D1T)-D2*exp(-r*D2T);
X2=X-D2;
X1=X-D1-D2*exp(-r*(D2T-D1T));
d1=(log(S1/X)+(r+v^2/2)*T)/(v*sqrt(T));
d2=d1-v*sqrt(T);
P1=S1*normcdf(d1)-X*exp(-r*T)*normcdf(d2);
d11=(log(S1/X1)+(r+v^2/2)*D1T)/(v*sqrt(D1T));
d21=d11-v*sqrt(D1T);
d11,d21 %这一行我加的
P2=S1*normcdf(d11)-X1*exp(-r*D1T)*normcdf(d21);
d12=(log(S1/X2)+(r+v^2/2)*D2T)/(v*sqrt(D2T));
d22=d12-v*sqrt(D2T);
P3=S1*normcdf(d12)-X2*exp(-r*D2T)*normcdf(d22);
P4=max(P1,P2);
P=max(P3,P4);
if CP=='c'
P
else
0
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
在Matlab下面输入:
pm('c',1,1,1,1,1,1,1,1,1)
会显示
d11 =
0.1691 + 3.1416i
d21 =
-0.830