📄 main.m
字号:
close all;
clear all;
n = 1:600;%sample steps
stdw = sqrt(10);
ngrid = 50;
npar = 500;%particle number
N = length(n);
%N=500
% Generate the state process and observations
x0 = 0.1;
c0 = 1;
b0=25;
xpath = zeros(1,N);
b=b0;
xpath(1) = x0/2 + b*x0/(1+x0^2) +8*cos(1.2) + stdw*randn(1,1);
for i=2:N
xpath(i) = xpath(i-1)/2 + 25*xpath(i-1)/(1+xpath(i-1)^2) +8*cos(1.2*i) + stdw*randn(1,1);
end
zpath = 1/20*(xpath.^2) + randn(1,N);
% Particle filter with resampling
w = ones(npar,1)/npar;
xprev = randn(npar, 1);
SParMat = zeros(npar, N);
SXParMat = zeros(npar, N);
sxparpath = zeros(1,N);
likelihood=zeros(N,1);
for i=1:N
xnext = drawpar(xprev, stdw, i);
xs = (xnext.^2)/20;
w = w.*(1/sqrt(2*pi)*exp(-((zpath(i)-xs).^2)/2));
l=1/sqrt(2*pi)*exp(-((zpath(i)-xs).^2)/2);
Li=sum(l)/npar;%i时刻的所有粒子似然函数值均值
likelihood(i)=Li;
Di=0;
if i<20
for j=1:i
Di=Di+(-(log(likelihood(j))))
end
else
for j=i-20+1:i
Di=Di+(-(log(likelihood(j))))
end
end
w = w/sum(w);
SParMat(:,i) = w;
SXParMat(:,i) = xnext;
sxparpath(i) = w'*xnext;
[xprev, w] = impResample(xnext, w);
end
ErrorSIR = sqrt(1/N*(sxparpath-xpath)*(sxparpath-xpath)');
figure;
plot(likelihood, 's');
%xlabel('time');
%ylabel('x value');
%title('SIR Particle filter');
%legend('Actual', 'Estimate');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -