⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 is_controllable.m

📁 similer program for matlab
💻 M
字号:
## Copyright (C) 1993, 1994, 1995, 2000, 2002, 2004, 2005, 2006, 2007##               Auburn University.  All rights reserved.#### This file is part of Octave.#### Octave 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.#### Octave 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 Octave; see the file COPYING.  If not, see## <http://www.gnu.org/licenses/>.## -*- texinfo -*-## @deftypefn {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{sys}, @var{tol})## @deftypefnx {Function File} {[@var{retval}, @var{u}] =} is_controllable (@var{a}, @var{b}, @var{tol})## Logical check for system controllability.#### @strong{Inputs}## @table @var## @item sys## system data structure## @item a## @itemx b## @var{n} by @var{n}, @var{n} by @var{m} matrices, respectively## @item tol## optional roundoff parameter.  Default value: @code{10*eps}## @end table#### @strong{Outputs}## @table @var## @item retval## Logical flag; returns true (1) if the system @var{sys} or the## pair (@var{a}, @var{b}) is controllable, whichever was passed as input## arguments.## @item u## @var{u} is an orthogonal basis of the controllable subspace.## @end table#### @strong{Method}## Controllability is determined by applying Arnoldi iteration with## complete re-orthogonalization to obtain an orthogonal basis of the## Krylov subspace## @example## span ([b,a*b,...,a^@{n-1@}*b]).## @end example## The Arnoldi iteration is executed with @code{krylov} if the system## has a single input; otherwise a block Arnoldi iteration is performed## with @code{krylovb}.## @seealso{size, rows, columns, length, ismatrix, isscalar, isvector## is_observable, is_stabilizable, is_detectable, krylov, krylovb}## @end deftypefn## Author: A. S. Hodel <a.s.hodel@eng.auburn.edu>## Created: August 1993## Updated by A. S. Hodel (scotte@eng.auburn.edu) Aubust, 1995 to use krylovb## Updated by John Ingram (ingraje@eng.auburn.edu) July, 1996 for packed systemsfunction [retval, U] = is_controllable (a, b, tol)  deftol = 1;    # assume default tolerance  if (nargin < 1 || nargin > 3)    print_usage ();  elseif (isstruct (a))    ## system structure passed.    sys = sysupdate (a, "ss");    [a, bs] = sys2ss (sys);    if (nargin > 2)      print_usage ();    elseif (nargin == 2)      tol = b;          % get tolerance      deftol = 0;    endif    b = bs;  else    ## a,b arguments sent directly.    if (nargin < 2)      print_usage ();    else      deftol = 1;    endif  endif  ## check for default tolerance  if (deftol)    tol = 1000*eps;  endif  ## check tol dimensions  if (! isscalar (tol))    error ("is_controllable: tol(%dx%d) must be a scalar", ...           rows (tol), columns (tol));  elseif (! is_sample (tol))    error ("is_controllable: tol=%e must be positive",tol);  endif  ## check dimensions compatibility  n = issquare (a);  [nr, nc] = size (b);  if (n == 0 || n != nr || nc == 0)    warning ("is_controllable: a=(%dx%d), b(%dx%d)",rows(a),columns(a),nr,nc);    retval = 0;  else    ## call block-krylov subspace routine to get an orthogonal basis    ## of the controllable subspace.    [U, H, Ucols] = krylov (a, b, n, tol, 1);    retval = (Ucols == n);  endifendfunction

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -