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