特别傻瓜了一个问题~
卡尔曼滤波的状态向量作图,请问怎么做啊???
function bestpara = kalmanfilterfun700()
retdata=load('f:\newratedata.txt','-ascii');
Y=retdata';
para0=[0.0573,0.0262,0.0163,-0.7968,-2.4818,-5.5475,-6.7156,-8.1745,-13.0229,-65.8941,-8.1000,-7.0900,-0.8566,-3.4768];
[xv,fv]=fminsearch(@(para) subfun(para),para0,optimset('MaxFunEvals',50000,'MaxIter',50000));
bestpara=xv;
disp(fv);
function lf=subfun(para)
delta0=para(1);
delta1=para(2);
delta2=para(3);
lambda1=exp(para(4));
lambda2=exp(para(5));
sigma=[1:7];
for i=1:7
sigma(i)=exp(para(5+i));
end
q1=exp(para(13))+0.0001;
q2=exp(para(14))+0.0001;
tau=[1,2,3,4,5,7,10];
A=zeros(1,7);
for i=1:7
A(1,i)=value2(delta1,lambda1,tau(i))*(-q1/lambda1)+value2(delta2,lambda2,tau(i))*(-q2/lambda2)+delta0+value1(delta1,lambda1,tau(i))+value1(delta2,lambda2,tau(i));
end
H=zeros(2,7);
for i=1:7
H(1,i)=value2(delta1,lambda1,tau(i));
H(2,i)=value2(delta2,lambda2,tau(i));
end
R=zeros(7,7);
for i=1:7
R(i,i)=sigma(i)^2;
end
F=zeros(2,2);
F(1,1)=exp(-1*lambda1/12);
F(2,2)=exp(-1*lambda2/12);
Q=zeros(2,2);
Q(1,1)=(1-exp(-2*lambda1/12))/(2*lambda1);
Q(2,2)=(1-exp(-2*lambda2/12))/(2*lambda2);
LnL=0;
St=zeros(2,1);
vp=inv(eye(4)-kron(F,F))*reshape(Q,4,1);
Pt=reshape(vp,2,2);
obs=length(Y(1,:));
for t=1:obs
Eyt=A'+H'*St;
yt=Y(:,t);
res=yt-Eyt;
Zt=H'*Pt*H+R;
Lt=-0.5*log(det(Zt))-0.5*res'*inv(Zt)*res;
LnL=LnL+Lt;
Kt=F*Pt*H*inv(Zt);
St=F*St+Kt*res;
Pt=F*(Pt-Pt*H*inv(Zt)*H'*Pt)*F'+Q;
end
lf=-1*LnL;
end
function variablevalue=value1(delta,lambda,tau)
variablevalue=-(delta^2)*(tau-exp(-2*lambda*tau)/(2*lambda)+1/(2*lambda)+2*exp(-1*lambda*tau)/lambda-2/lambda)/(2*(lambda^2)*tau);
end
function variablevalue=value2(delta,lambda,tau)
variablevalue=delta*(1-exp(-1*lambda*tau))/(lambda*tau);
end
end