Initial commit
[pftoolbox.git] / filters / @sir / tupdate.m
blobdde2572ef0fb5ed0ef2d8eccbe5ac28aa50bb662
1 function [obj, xpred, xpred_p]=tupdate(obj,varargin)\r
2 % Time update method for the SIR particle filter\r
3 %\r
4 % Syntax: (* = optional)\r
5 %\r
6 % [sirobj, xpred, xpred_particles] = tupdate(sirobj, u*, xhat_particles*, t*);\r
7 %\r
8 % In arguments:\r
9 %\r
10 % 1. sirobj\r
11 %       SIR filter object that will be used for the time update.\r
12 % 2* u\r
13 %       A scalar or column vector u(t) containing the deterministic data for the particular step.\r
14 % 2* []\r
15 %       No u(t) will be used in the calculations.\r
16 % 3* xhat_particles\r
17 %       A matrix representing the last particle swarm used for estimation of x\r
18 % 3* []\r
19 %       xhat_particles will be set to ekfobj.xhat_particles.\r
20 % 4* t\r
21 %       The time of the actual filtering step. Ts will be set to this value\r
22 % 4* []\r
23 %       t will be set to ekfobj.t, and also Ts will be set to this value\r
24 %\r
25 % Out arguments:\r
26 %\r
27 % 1. sirobj\r
28 %       SIR object containg the result of the filter operation.\r
29 % 2. xpred\r
30 %       One-step prediction of x\r
31 %       This can also be accessed from the object using the sirobj.xpred property\r
32 % 3. xpred_particles\r
33 %       The particle swarm used to calculate xpred.\r
34 %       This can also be accessed from the object using the sirobj.xpred_particles property\r
36 % Toolbox for nonlinear filtering.\r
37 % Copyright (C) 2005  Jakob Rosén <jakob.rosen@gmail.com>\r
38 %\r
39 % This program is free software; you can redistribute it and/or\r
40 % modify it under the terms of the GNU General Public License\r
41 % as published by the Free Software Foundation; either version 2\r
42 % of the License, or (at your option) any later version.\r
43 %\r
44 % This program is distributed in the hope that it will be useful,\r
45 % but WITHOUT ANY WARRANTY; without even the implied warranty of\r
46 % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
47 % GNU General Public License for more details.\r
48 %\r
49 % You should have received a copy of the GNU General Public License\r
50 % along with this program; if not, write to the Free Software\r
51 % Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
53 % Since ue defaults to [], we don't have to go through the long procedure with it\r
54 if nargin>=2; ue=varargin{1}; else; ue=[]; end;\r
56 % Declare the arguments\r
57 xhat_p=[];\r
58 t=[];\r
60 % Fetch arguments, if they exist\r
61 if nargin>=3; xhat_p=varargin{2}; end;\r
62 if nargin>=4; t=varargin{3}; end;\r
64 % If an empty argument, or no argument at all, was supplied - use its default value!\r
65 if isempty(xhat_p)\r
66         xhat_p=obj.xhat_particles;\r
67 end\r
69 if isempty(t)\r
70         t=obj.t;\r
71 end\r
73 % Time update block\r
74 xpred_p=f_general(obj.model,xhat_p,t,ue);               % Time update\r
75 xpred=mean(xpred_p,2);                                  % Save predicted data\r
77 Ts=t;                   % One samplepoint used.\r
78 t=t+get(model,'T');     % Update time\r
80 % Store relevant variables in the object\r
81 obj.xpred=xpred;\r
82 obj.xhat_particles=xhat_p;\r
83 obj.xpred_particles=xpred_p;\r
84 obj.u=ue;\r
85 obj.Ts=Ts;\r
86 obj.t=t;\r