annotate scripts/control/system/ss.m @ 4844:9f7ef92b50b0

[project @ 2004-04-02 17:26:53 by jwe]
author jwe
date Fri, 02 Apr 2004 17:26:54 +0000
parents f105000ab25c
children d62c421f448b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4779
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 1996, 1998 Auburn University. All rights reserved.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
2 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
4 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by the
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
7 ## Free Software Foundation; either version 2, or (at your option) any
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
8 ## later version.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
9 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but WITHOUT
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
11 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
12 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
13 ## for more details.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
14 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, write to the Free
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
17 ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
18
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
20 ## @deftypefn {Function File} {} ss (@var{a}, @var{b}, @var{c}, @var{d}, @var{tsam}, @var{n}, @var{nz}, @var{stname}, @var{inname}, @var{outname}, @var{outlist})
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
21 ## Create system structure from state-space data. May be continous,
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
22 ## discrete, or mixed (sampeled-data)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
23 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
24 ## @strong{Inputs}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
25 ## @table @var
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
26 ## @item a
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
27 ## @itemx b
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
28 ## @itemx c
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
29 ## @itemx d
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
30 ## usual state space matrices.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
31 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
32 ## default: @var{d} = zero matrix
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
33 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
34 ## @item tsam
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
35 ## sampling rate. Default: @math{tsam = 0} (continuous system)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
36 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
37 ## @item n
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
38 ## @itemx nz
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
39 ## number of continuous, discrete states in the system
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
40 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
41 ## If @var{tsam} is 0, @math{n = @code{rows}(@var{a})}, @math{nz = 0}.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
42 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
43 ## If @var{tsam} is greater than zero, @math{n = 0},
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
44 ## @math{nz = @code{rows}(@var{a})}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
45 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
46 ## see below for system partitioning
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
47 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
48 ## @item stname
4844
9f7ef92b50b0 [project @ 2004-04-02 17:26:53 by jwe]
jwe
parents: 4779
diff changeset
49 ## cell array of strings of state signal names
4779
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
50 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
51 ## default (@var{stname}=[] on input): @code{x_n} for continuous states,
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
52 ## @code{xd_n} for discrete states
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
53 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
54 ## @item inname
4844
9f7ef92b50b0 [project @ 2004-04-02 17:26:53 by jwe]
jwe
parents: 4779
diff changeset
55 ## cell array of strings of input signal names
4779
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
56 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
57 ## default (@var{inname} = [] on input): @code{u_n}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
58 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
59 ## @item outname
4844
9f7ef92b50b0 [project @ 2004-04-02 17:26:53 by jwe]
jwe
parents: 4779
diff changeset
60 ## cell array of strings of input signal names
4779
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
61 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
62 ## default (@var{outname} = [] on input): @code{y_n}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
63 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
64 ## @item outlist
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
65 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
66 ## list of indices of outputs y that are sampled
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
67 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
68 ## If @var{tsam} is 0, @math{outlist = []}.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
69 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
70 ## If @var{tsam} is greater than 0, @math{outlist = 1:@code{rows}(@var{c})}.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
71 ## @end table
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
72 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
73 ## Unlike states, discrete/continous outputs may appear in any order.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
74 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
75 ## @strong{Note} @code{sys2ss} returns a vector @var{yd} where
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
76 ## @var{yd}(@var{outlist}) = 1; all other entries of @var{yd} are 0.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
77 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
78 ## @strong{Outputs}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
79 ## @var{outsys} = system data structure
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
80 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
81 ## @strong{System partitioning}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
82 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
83 ## Suppose for simplicity that outlist specified
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
84 ## that the first several outputs were continuous and the remaining outputs
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
85 ## were discrete. Then the system is partitioned as
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
86 ## @example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
87 ## @group
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
88 ## x = [ xc ] (n x 1)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
89 ## [ xd ] (nz x 1 discrete states)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
90 ## a = [ acc acd ] b = [ bc ]
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
91 ## [ adc add ] [ bd ]
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
92 ## c = [ ccc ccd ] d = [ dc ]
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
93 ## [ cdc cdd ] [ dd ]
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
94 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
95 ## (cdc = c(outlist,1:n), etc.)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
96 ## @end group
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
97 ## @end example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
98 ## with dynamic equations:
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
99 ## @ifinfo
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
100 ## @math{d/dt xc(t) = acc*xc(t) + acd*xd(k*tsam) + bc*u(t)}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
101 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
102 ## @math{xd((k+1)*tsam) = adc*xc(k*tsam) + add*xd(k*tsam) + bd*u(k*tsam)}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
103 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
104 ## @math{yc(t) = ccc*xc(t) + ccd*xd(k*tsam) + dc*u(t)}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
105 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
106 ## @math{yd(k*tsam) = cdc*xc(k*tsam) + cdd*xd(k*tsam) + dd*u(k*tsam)}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
107 ## @end ifinfo
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
108 ## @iftex
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
109 ## @tex
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
110 ## $$\eqalign{
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
111 ## {d \over dt} x_c(t)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
112 ## & = a_{cc} x_c(t) + a_{cd} x_d(k*t_{sam}) + bc*u(t) \cr
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
113 ## x_d((k+1)*t_{sam})
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
114 ## & = a_{dc} x_c(k t_{sam}) + a_{dd} x_d(k t_{sam}) + b_d u(k t_{sam}) \cr
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
115 ## y_c(t)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
116 ## & = c_{cc} x_c(t) + c_{cd} x_d(k t_{sam}) + d_c u(t) \cr
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
117 ## y_d(k t_{sam})
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
118 ## & = c_{dc} x_c(k t_{sam}) + c_{dd} x_d(k t_{sam}) + d_d u(k t_{sam})
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
119 ## }$$
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
120 ## @end tex
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
121 ## @end iftex
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
122 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
123 ## @strong{Signal partitions}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
124 ## @example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
125 ## @group
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
126 ## | continuous | discrete |
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
127 ## ----------------------------------------------------
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
128 ## states | stname(1:n,:) | stname((n+1):(n+nz),:) |
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
129 ## ----------------------------------------------------
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
130 ## outputs | outname(cout,:) | outname(outlist,:) |
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
131 ## ----------------------------------------------------
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
132 ## @end group
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
133 ## @end example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
134 ## where @math{cout} is the list of in 1:@code{rows}(@var{p})
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
135 ## that are not contained in outlist. (Discrete/continuous outputs
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
136 ## may be entered in any order desired by the user.)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
137 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
138 ## @strong{Example}
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
139 ## @example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
140 ## octave:1> a = [1 2 3; 4 5 6; 7 8 10];
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
141 ## octave:2> b = [0 0 ; 0 1 ; 1 0];
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
142 ## octave:3> c = eye(3);
4844
9f7ef92b50b0 [project @ 2004-04-02 17:26:53 by jwe]
jwe
parents: 4779
diff changeset
143 ## octave:4> sys = ss(a,b,c,[],0,3,0,@{"volts","amps","joules"@});
4779
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
144 ## octave:5> sysout(sys);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
145 ## Input(s)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
146 ## 1: u_1
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
147 ## 2: u_2
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
148 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
149 ## Output(s):
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
150 ## 1: y_1
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
151 ## 2: y_2
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
152 ## 3: y_3
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
153 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
154 ## state-space form:
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
155 ## 3 continuous states, 0 discrete states
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
156 ## State(s):
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
157 ## 1: volts
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
158 ## 2: amps
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
159 ## 3: joules
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
160 ##
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
161 ## A matrix: 3 x 3
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
162 ## 1 2 3
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
163 ## 4 5 6
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
164 ## 7 8 10
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
165 ## B matrix: 3 x 2
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
166 ## 0 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
167 ## 0 1
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
168 ## 1 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
169 ## C matrix: 3 x 3
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
170 ## 1 0 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
171 ## 0 1 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
172 ## 0 0 1
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
173 ## D matrix: 3 x 3
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
174 ## 0 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
175 ## 0 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
176 ## 0 0
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
177 ## @end example
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
178 ## Notice that the @math{D} matrix is constructed by default to the
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
179 ## correct dimensions. Default input and output signals names were assigned
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
180 ## since none were given.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
181 ## @end deftypefn
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
182
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
183 ## Author: John Ingram <ingraje@eng.auburn.edu>
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
184 ## Created: July 20, 1996
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
185
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
186 function retsys = ss (a, b, c, d, tsam, n, nz, stname, inname, outname, outlist)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
187
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
188 ## Test for correct number of inputs
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
189 if ((nargin < 3) | (nargin > 11))
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
190 usage("retsys = ss (a,b,c{,d,tsam,n,nz,stname,inname,outname,outlist})");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
191 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
192
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
193 ## verify A, B, C, D arguments
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
194 ## If D is not specified, set it to a zero matrix of appriate dimension.
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
195 if (nargin == 3) d = zeros(rows(c) , columns(b));
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
196 elseif (isempty(d)) d = zeros(rows(c) , columns(b)); endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
197
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
198 ## Check the dimensions
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
199 [na,m,p] = abcddim(a,b,c,d);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
200
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
201 ## If dimensions are wrong, exit function
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
202 if (m == -1)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
203 error("a(%dx%d), b(%dx%d), c(%dx%d), d(%dx%d); incompatible", ...
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
204 rows(a), columns(a), rows(b), columns(b), rows(c), columns(c), ...
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
205 rows(d), columns(d));
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
206 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
207
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
208 ## check for tsam input
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
209 if(nargin < 5) tsam = 0;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
210 elseif( !( is_sample(tsam) | (tsam == 0) ) )
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
211 error("tsam must be a nonnegative real scalar");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
212 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
213
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
214 ## check for continuous states
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
215 if( (nargin < 6) & (tsam == 0) ) n = na;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
216 elseif(nargin < 6) n = 0;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
217 elseif((!ismatrix(n)) | isstr(n))
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
218 error("Parameter n is not a numerical value.");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
219 elseif( (!isscalar(n)) | (n < 0 ) | (n != round(n)) )
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
220 if(isscalar(n)) error("invalid value of n=%d,%e",n,n);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
221 else error("invalid value of n=(%dx%d)", ...
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
222 rows(n), columns(n)); endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
223 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
224
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
225 ## check for num discrete states
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
226 if( (nargin < 7) & (tsam == 0)) nz = 0;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
227 elseif(nargin < 7) nz = na - n;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
228 elseif((!ismatrix(nz)) | isstr(nz))
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
229 error("Parameter nz is not a numerical value.");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
230 elseif( (!isscalar(nz)) | (nz < 0 ) | (nz != round(nz)) )
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
231 if(isscalar(nz))
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
232 error(["invalid value of nz=",num2str(nz)]);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
233 else
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
234 error(["invalid value of nz=(",num2str(rows(nz)),"x", ...
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
235 num2str(columns(nz)),")"]);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
236 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
237 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
238
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
239 ## check for total number of states
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
240 if( (n + nz) != na )
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
241 error(["invalid: a is ",num2str(na),"x",num2str(na),", n=", ...
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
242 num2str(n),", nz=",num2str(nz)]);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
243 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
244
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
245 ## construct system with default names
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
246 retsys.a = a;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
247 retsys.b = b;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
248 retsys.c = c;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
249 retsys.d = d;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
250
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
251 retsys.n = n;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
252 retsys.nz = nz;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
253 retsys.tsam = tsam;
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
254 retsys.yd = zeros(1,p); # default value entered below
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
255
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
256 ## Set the system vector: active = 2(ss), updated = [0 0 1];
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
257 retsys.sys = [2, 0, 0, 1];
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
258
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
259 retsys.stname = __sysdefstname__ (n, nz);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
260 retsys.inname = __sysdefioname__ (m, "u");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
261 retsys.outname = __sysdefioname__ (p, "y");
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
262
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
263 ## check for state names
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
264 if(nargin >= 8)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
265 if(!isempty(stname)) retsys = syssetsignals(retsys,"st",stname); endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
266 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
267
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
268 ## check for input names
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
269 if(nargin >= 9)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
270 if(!isempty(inname)) retsys = syssetsignals(retsys,"in",inname); endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
271 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
272
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
273 ## check for output names
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
274 if(nargin >= 10)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
275 if(!isempty(outname)) retsys = syssetsignals(retsys,"out",outname); endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
276 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
277
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
278 ## set up yd
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
279 if(nargin < 11)
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
280 retsys = syssetsignals(retsys,"yd",ones(1,p)*(tsam > 0));
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
281 else
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
282 if(!isempty(outlist))
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
283 retsys = syssetsignals(retsys,"yd",ones(size(outlist)),outlist);
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
284 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
285 endif
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
286
f105000ab25c [project @ 2004-02-17 02:34:33 by jwe]
jwe
parents:
diff changeset
287 endfunction