From f41e969dbe128ff3a3e458aaf3fe22fd8967d72c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Karam=C3=A9?= <frederic.karame@univ-lemans.fr> Date: Fri, 16 Nov 2012 11:35:39 +0100 Subject: [PATCH] computes the weights and the nodes for approximating gaussian distributions using the scaled unscented approach. --- matlab/particle/unscented_sigma_points.m | 42 ++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 matlab/particle/unscented_sigma_points.m diff --git a/matlab/particle/unscented_sigma_points.m b/matlab/particle/unscented_sigma_points.m new file mode 100644 index 000000000..26fcc4b5c --- /dev/null +++ b/matlab/particle/unscented_sigma_points.m @@ -0,0 +1,42 @@ +function [nodes,W_m,W_c] = unscented_sigma_points(n,DynareOptions) +% +% Computes nodes and weigths for a scaled unscented transform cubature +% INPUTS +% n [integer] scalar, number of variables. +% +% OUTPUTS +% nodes [double] nodes of the cubature +% weigths [double] associated weigths +% +% REFERENCES +% +% +% +% NOTES +% +% Copyright (C) 2009-2012 Dynare Team +% +% This file is part of Dynare. +% +% Dynare is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% Dynare is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with Dynare. If not, see <http://www.gnu.org/licenses/>. + +lambda = (DynareOptions.particle.unscented.alpha^2)*(n+DynareOptions.particle.unscented.kappa) - n ; +nodes = [ zeros(n,1) ( sqrt(n+lambda).*([ eye(n) -eye(n)]) ) ]' ; +W_m = lambda/(n+lambda) ; +W_c = W_m + (1-DynareOptions.particle.unscented.alpha^2+DynareOptions.particle.unscented.beta) ; +temp = ones(2*n,1)/(2*(n+lambda)) ; +W_m = [W_m ; temp] ; +W_c = [W_c ; temp] ; + + -- GitLab