Mercurial > hg > octave-nkf
diff scripts/control/syschnames.m @ 3213:ba1c7cdc6090
[project @ 1998-11-06 16:15:36 by jwe]
author | jwe |
---|---|
date | Fri, 06 Nov 1998 16:16:31 +0000 |
parents | |
children | dbcc24961c44 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/scripts/control/syschnames.m @@ -0,0 +1,141 @@ +# Copyright (C) 1996 A. Scottedward Hodel +# +# 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 2, 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, write to the Free +# Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +function retsys = syschnames(sys,opt,list,names) +# retsys = syschnames(sys,opt,list,names) +# change the names of selected inputs, outputs and states. +# inputs: +# sys: system data structure +# opt: []: change default name (output) +# "out": change selected output names +# "in": change selected input names +# "st": change selected state names +# "yd": change selected outputs from discrete to continuous or +# from continuous to discrete. +# +# list: vector of indices of outputs, yd, inputs, or +# states whose respective names should be changed +# +# names: strings or string arrays containing +# names corresponding to the lists above. To +# change yd, use a vector. Set the name to 0 for continuous, +# or 1 for discrete. +# outputs: +# retsys=sys with appropriate signal names changed +# (or yd values, where appropriate) + +# Written by John Ingram August 1996 +# $Revision: 1.3 $ +# $Log: syschnames.m,v $ +# Revision 1.3 1998/07/17 15:31:06 hodelas +# use is_empty instead of max(size(...)) +# + + save_val = implicit_str_to_num_ok; # save for later + implicit_str_to_num_ok = 1; + + if (nargin != 4) + usage("retsys=syschnames(sys,opt,list[,names])"); + elseif (!is_struct(sys)) + error("sys must be a system data structure"); + elseif (isempty(opt)) + opt = "out"; + elseif( ! isstr(opt) ) + error("opt must be a string"); + elseif( ! (strcmp(opt,"out") + strcmp(opt,"yd") + ... + strcmp(opt,"in") + strcmp(opt,"st") ) ) + error("opt must be one of [], ""out"", ""yd"", ""in"", or ""st"""); + elseif(min(size(list)) > 1) + disp("syschnames: list=") + disp(list); + error("list must be a vector") + endif + + if (strcmp(opt,"out")) + # update output names + sys.outname = syschnamesl(list,sys.outname,names,"outlist"); + elseif (strcmp(opt,"in")) + sys.inname = syschnamesl(list,sys.inname,names, "inlist"); + elseif (strcmp(opt,"st")) + sys.stname = syschnamesl(list,sys.stname,names,"stlist"); + else + # it's yd + ym = max(size(list)); + ys = min(size(list)); + maxn = rows(sys.outname); + + if(ym != 0) + if( (ym > maxn) | (ys != 1) ) + error(["system has ",num2str(maxn)," outputs, ", ... + "list=(",num2str(rows(list)),"x",num2str(columns(list)),")"]); + endif + + if( ym != length(names)) + error(["list has ",num2str(ym)," entries, and names has ",... + num2str(length(names))," entries."]); + endif + + if (min((names == 1) | (names == 0)) == 0) + error("yd must be either zero or one"); + endif + + if (max(list) > maxn) + error(["The largest entry in the list is ",num2str(max(list)),... + " exceeds number of outputs=",num2str(maxn)]) + endif + + if (max(names) && (sys.tsam == 0) ) + warning("syschnames: discrete outputs with tsam=0; setting tsam=1"); + disp(" effected outputs are:") + if(is_siso(sys)) + outlist(sys.outname," ",[],list); + else + outlist(sys.outname(list,:)," ",[],list); + endif + sys.tsam = 1; + endif + + # reshape everything as a column vector + sys.yd = reshape(sys.yd,length(sys.yd),1); + names = reshape(names,length(names),1); + + #disp("syschnames: list=") + #disp(list) + #disp("syschnames: names=") + #disp(names) + #disp("syschnames: sys.yd=") + #disp(sys.yd) + + sys.yd(list) = names; + + if ((min(sys.yd) == 0) && (max(sys.yd) == 0) && (sys.tsam > 0) ) + warning("discrete states but no discrete outputs selected"); + endif + + endif + + endif + + retsys = sys; + implicit_str_to_num_ok = save_val; # restore value + + #disp("syschnames: exiting with") + #retsys + #disp("/syschnames") + +endfunction