问题遇到的现象和发生背景
我迭代计算Vt和σ,还想计算DD和P的值,但是DD和P的值输出全为0
问题相关代码,请勿粘贴截图
a = importdata('./1.csv');
codes=a.data(:,1);
Ts = a.data(:,2);
rs = a.data(:,3);
EquityThetas = a.data(:,4);
Bs = a.data(:,5);
Es = a.data(:,6);
ret_Vts = zeros(1,length(Ts))';
ret_sigmas = zeros(1,length(Ts))';
ret_DDs = zeros(1,length(Ts))';
ret_Ps = zeros(1,length(Ts))';
for i=1:1:length(Ts)
T=Ts(i)/12;
r=rs(i);
EquityTheta=EquityThetas(i);
B=Bs(i);
E=Es(i);
[Vt,sigma,DDs,Ps]=iteration_fun(r,T,EquityTheta,E,B);
ret_Vts(i)=Vt;
ret_sigmas(i)=sigma;
ret_DDs(i)=DDs;
ret_Ps(i) = Ps;
i
end
function [Vt,sigma_a,DDs,Ps]=iteration_fun(r,T,sigma_e,E,B)
max_iter=1000;
% 因为资产价值和股权价值的值都太大了,所以这里设置的变量为资产价值(V)除以负债(B)
% 设置最多迭代1000次?
VToBs=zeros(1,max_iter);
sigma=zeros(1,max_iter); %迭代次数的结果
VToBs(1)=1;
sigma(1)=1; %估值初值
iter=1;
while iter<=max_iter
% 通过V和sigma 计算d1
d1=(log(VToBs(iter))+(r+sigma(iter)^2/2)*T)/(sigma(iter)*sqrt(T));
% d2计算,得到DD,以及P
d2=d1-sigma(iter)*sqrt(T);
DD=d2;
P=normcdf(-d2);
% 通过d1 d2计算新的V
V=(E+B*exp(-r*T)*normcdf(d2))/normcdf(d1);
% 保存新的V和sigma
VToBs(iter+1)=V/B;
sigma(iter+1)=sigma_e*E/V/normcdf(d1);
DD(iter+1)=d2;
P(iter+1)=normcdf(-d2);
%当sigma值收敛了就停止迭代?
if abs(sigma(iter+1)-sigma(iter))<=1e-6
break
end
iter=iter+1;
end
% 输出sigma_a和Vt
sigma_a=sigma(iter);
Vt = VToBs(iter)*B;
DDs = DD(iter);
Ps = P(iter);
end
运行结果及报错内容
我想要达到的结果
要怎样才能输出有值呢?是我哪里出错了吗?