KalmanFilter
logistic2.m
Go to the documentation of this file.
1 clear all;
2 addpath('..');
3 addpath('../../discrete_discrete');
4 addpath('../../discrete_discrete/examples');
5 
6 logistic;
7 close all;
8 
9 particle_count = 30;
10 pkg load statistics;
11 particle1 = mvnrnd(x_0-15,P_0,particle_count/2)';
12 particle2 = mvnrnd(x_0+15,P_0,particle_count/2)';
13 particle = [particle1,particle2];
14 [estimates_particle, covariances_particle, particles] = particle_filter(next_func,jacobian_func,dt,t_start,state_count,sensor_count,...
15  outputs,particle_count,particle,C,chol(Q_d)',chol(R_d)',chol(P_0)',x_0, measurements);
16 
17 
18 h = figure;
19 hold on;
20 lim = 975;
21 plot(0:dt:(outputs-lim-1)*dt,measurements(1:end-lim),'LineWidth',3);
22 plot(0:dt:(outputs-lim-1)*dt,process_noise_data(1:end-lim),'LineWidth',3);
23 plot(0:dt:(outputs-lim-1)*dt,estimates_particle(1:end-lim-1),'LineWidth',3);
24 
25 for ii=1:(outputs-lim)
26  [xUnique, ignore, ixs] = unique(particles{ii});
27  counts = zeros(size(xUnique,1),1);
28  for ix = 1:size(counts,1);
29  counts(ix) = sum(ixs == ix);
30  end
31  scatter(dt*(ii-1)*ones(length(xUnique),1),xUnique,counts*20,'g','filled');
32 end
33 legend('Measurement','Real data','Estimate');
34 xlabel('Time')
35 ylabel('Population')
function particle_filter(in f_func, in jacobian_func, in dt_between_measurements, in start_time, in state_count, in sensor_count, in measurement_count, in particle_count, in particle, in C, in Q_root, in R_root, in P_0_root, in x_0, in measurements)