📄 starp.m
字号:
## Copyright (C) 1996, 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} {} starp (@var{P}, @var{K}, @var{ny}, @var{nu})#### Redheffer star product or upper/lower LFT, respectively.## @example## @group#### +-------+## --------->| |--------->## | P |## +--->| |---+ ny## | +-------+ |## +-------------------+## | |## +----------------+ |## | |## | +-------+ |## +--->| |------+ nu## | K |## --------->| |--------->## +-------+## @end group## @end example## If @var{ny} and @var{nu} ``consume'' all inputs and outputs of## @var{K} then the result is a lower fractional transformation. ## If @var{ny} and @var{nu} ``consume'' all inputs and outputs of ## @var{P} then the result is an upper fractional transformation.#### @var{ny} and/or @var{nu} may be negative (i.e. negative feedback).## @end deftypefn## Author: Kai P. Mueller <mueller@ifr.ing.tu-bs.de>## Created: May 1998function sys = starp (P, K, ny, nu); if (nargin != 2 && nargin != 4) print_usage (); endif if (! isstruct (P)) error ("---> P must be in system data structure"); endif if (! isstruct (K)) error ("---> K must be in system data structure"); endif P = sysupdate (P, "ss"); [n, nz, mp, pp] = sysdimensions (P); np = n + nz; K = sysupdate (K, "ss"); [n, nz, mk, pk] = sysdimensions (K); nk = n + nz; ny_sign = 1; nu_sign = 1; if (nargin == 2) ## perform a LFT of P and K (upper or lower) ny = min ([pp, mk]); nu = min ([pk, mp]); else if (ny < 0) ny = -ny; ny_sign = -1; endif if (nu < 0) nu = -nu; nu_sign = -1; endif endif if (ny > pp) error ("---> P has not enough outputs."); endif if (nu > mp) error ("---> P has not enough inputs."); endif if (ny > mk) error ("---> K has not enough inputs."); endif if (nu > pk) error ("---> K has not enough outputs."); endif nwp = mp - nu; nzp = pp - ny; nwk = mk - ny; nzk = pk - nu; if (nwp + nwk < 1) error ("---> no inputs left for star product."); endif if (nzp + nzk < 1) error ("---> no outputs left for star product."); endif ## checks done, form sys if (nzp) Olst = 1:nzp; endif if (nzk) Olst = [Olst, pp+nu+1:pp+pk]; endif if (nwp) Ilst = 1:nwp; endif if (nwk) Ilst = [Ilst, mp+ny+1:mp+mk]; endif Clst = zeros (ny+nu, 2); for ii = 1:nu Clst(ii,:) = [nwp+ii, nu_sign*(pp+ii)]; endfor for ii = 1:ny Clst(nu+ii,:) = [mp+ii, ny_sign*(nzp+ii)]; endfor sys = buildssic (Clst, [], Olst, Ilst, P, K);endfunction
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -