X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fcontrol-2.3.52%2Fcovar.m;fp=octave_packages%2Fcontrol-2.3.52%2Fcovar.m;h=d904c696b7506ea001436848f920f0d3154e8e9e;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/control-2.3.52/covar.m b/octave_packages/control-2.3.52/covar.m new file mode 100644 index 0000000..d904c69 --- /dev/null +++ b/octave_packages/control-2.3.52/covar.m @@ -0,0 +1,91 @@ +## Copyright (C) 2010 Lukas F. Reichlin +## +## This file is part of LTI Syncope. +## +## LTI Syncope 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. +## +## LTI Syncope 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 LTI Syncope. If not, see . + +## -*- texinfo -*- +## @deftypefn{Function File} {[@var{p}, @var{q}] =} covar (@var{sys}, @var{w}) +## Return the steady-state covariance. +## +## @strong{Inputs} +## @table @var +## @item sys +## LTI model. +## @item w +## Intensity of Gaussian white noise inputs which drive @var{sys}. +## @end table +## +## @strong{Outputs} +## @table @var +## @item p +## Output covariance. +## @item q +## State covariance. +## @end table +## +## @seealso{lyap, dlyap} +## @end deftypefn + +## Author: Lukas Reichlin +## Created: January 2010 +## Version: 0.1 + +function [p, q] = covar (sys, w) + + if (nargin != 2) + print_usage (); + endif + + if (! isa (sys, "lti")) + error ("covar: first argument must be an LTI model"); + endif + + if (! isstable (sys)) + error ("covar: system must be stable"); + endif + + [a, b, c, d] = ssdata (sys); + + if (isct (sys)) + if (any (d(:))) + error ("covar: system is not strictly proper"); + endif + + q = lyap (a, b*w*b.'); + p = c*q*c.'; + else + q = dlyap (a, b*w*b.'); + p = c*q*c.' + d*w*d.'; + endif + +endfunction + +## continuous-time +%!shared p, q, p_exp, q_exp +%! sys = ss (-1, 1, 1, 0); +%! [p, q] = covar (sys, 5); +%! p_exp = 2.5000; +%! q_exp = 2.5000; +%!assert (p, p_exp, 1e-4); +%!assert (q, q_exp, 1e-4); + +## discrete-time +%!shared p, q, p_exp, q_exp +%! sys = ss ([-0.2, -0.5; 1, 0], [2; 0], [1, 0.5], [0], 0.1); +%! [p, q] = covar (sys, 5); +%! p_exp = 30.3167; +%! q_exp = [27.1493, -3.6199; -3.6199, 27.1493]; +%!assert (p, p_exp, 1e-4); +%!assert (q, q_exp, 1e-4); \ No newline at end of file