全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
6656 12
2012-02-15
a=zeros(4,4);
D=[1096853709
1422513664
1080412570
1099330560
];
a(:,1)=D;
b=zeros(4,4);
E=[5482334
112522064
57679892
4537800
];
b(:,1)=E;
t1=log(b/a);
为什么t1为:
  NaN   NaN   NaN   NaN         
  NaN   NaN   NaN   NaN   
  NaN   NaN   NaN   NaN
  NaN   NaN   NaN   NaN   
请各位高手指点?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-2-15 18:26:12
你别直接用矩阵相除,换成循环肯定没问题。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-15 18:34:25
矩阵奇异,不明白楼主为何这么做?两个矩阵的那么多元素为 0,相除就出问题了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-15 18:34:48
可否告知这样做的目的?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-17 14:00:41
far_faraway 发表于 2012-2-15 18:26
你别直接用矩阵相除,换成循环肯定没问题。
我就是在循环中使用的。可是我调试了下,第一次就遇到为nan的情况。不知道怎么回事
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-2-17 14:26:37
syslon 发表于 2012-2-15 18:34
可否告知这样做的目的?
就是算一下上市公司的信用风险。这是我全部的代码?可是结果都是NaN
function[Va,SigmaVa]=CalV(E,SigmaE,D,r,T)
a=zeros(8,8);
D=[
1096853709
1422513664
1080412570
1099330560
821720
676976
196840
37877619
];
a(:,1)=D;
b=zeros(8,8);
E=[
5482334
112522064
57679892
4537800
751520
1882103.375
285241.125
3833159
];
b(:,1)=E;
c=zeros(8,8);
SigmaE=[
0.401835787
0.543863954
0.609681884
0.741317746
0.917986928
0.931843334
1.004589468
1.02883818
];
c(:,1)=SigmaE;
%计算Va'SigmaVa
key=0;
r=0.0225;
T=1;
PI=4*atan(1);
Va=b;%va以E为迭代的初值
newVa=Va;
SigmaVa=c; %SigmaVa以SigmaE为迭代的初值
for k=1:10  %迭代SigmaVa
for j=1:10 %迭代Va
oldVa=newVa;
% Va=(E+D*exp(-r,T)*Nd2)/Ndl;
% SigmaVa=E*SigmaE/(E+D*exp(-r,T)*Nd2);
%t1=log(oldVa/a);
d1=(log(oldVa/a)+(r+(SigmaVa^2)/2)*T)/(SigmaVa*(T^(1/2)));
d2=d1-(SigmaVa*(T^(1/2)));
Nd1=normcdf(d1,0,1);
Nd2=normcdf(d2,0,1);
fV=oldVa*Nd1-a*exp(-r*T)*Nd2-b;
dfV=Nd1+exp(-d1*d1/2)/((2*PI*T)^0.5*SigmaVa)-a*exp(-r*T)*exp(-d2*d2/2)/((2*PI*T)^0.5*oldVa*SigmaVa);
if dfV==0
dfV
pause;
end
dV=-fV/dfV;
newVa=oldVa+dV;   %前后两次的值认为非常接近,则迭代成功
newVa
if newVa==0
oldVa
newVa
pause;
end
if(dV/newVa)<1e-7 & (dV/newVa)>-1e-7
break;
end
end
Va=newVa;
d1=(log(Va/a)+(r+(SigmaVa^2)/2)*T)/(SigmaVa*(T^(1/2)));
d2=d1-(SigmaVa*(T^(1/2)));
Nd1=normcdf(d1,0,1);
Nd2=normcdf(d2,0,1);  %方程右边与左边的比值
diff=(Va*Nd1-a*exp(-r*T)*Nd2)/b;
if diff<1-1e-5 | diff>1+1e-5
assert('迭代出现错误'); %迭代出现错误
else
key=key+1;
end
newSigmaVa=b*c/(b+a*exp(-r*T)*Nd2);
if((SigmaVa-newSigmaVa)/newSigmaVa)<1e-5 & ((SigmaVa-newSigmaVa)/newSigmaVa)>(-1e-5)
break;
key=key+1;
else
SigmaVa=newSigmaVa;
end
end
if key==2
%else
% Va=一l:
% SigmaVa=-1:
end
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群