annotate scripts/control/hinf/hinfdemo.m @ 5215:32c569794216

[project @ 2005-03-16 18:54:42 by jwe]
author jwe
date Wed, 16 Mar 2005 18:54:52 +0000
parents bdbee5282954
children 4c8a2e4e0717
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
1 ## Copyright (C) 1996, 1998 Kai P. Mueller
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
2 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
3 ## This file is part of Octave.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
4 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
5 ## Octave is free software; you can redistribute it and/or modify it
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
6 ## under the terms of the GNU General Public License as published by the
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
7 ## Free Software Foundation; either version 2, or (at your option) any
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
8 ## later version.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
9 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
10 ## Octave is distributed in the hope that it will be useful, but WITHOUT
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
11 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
12 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
13 ## for more details.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
14 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
15 ## You should have received a copy of the GNU General Public License
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
16 ## along with Octave; see the file COPYING. If not, write to the Free
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
17 ## Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
18
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
19 ## -*- texinfo -*-
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
20 ## @deftypefn {Function File} {} hinfdemo ()
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
21 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
22 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
23 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
24 ## $ { \cal H }_\infty $
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
25 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
26 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
27 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
28 ## H-infinity
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
29 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
30 ## design demos for continuous @acronym{SISO} and @acronym{MIMO} systems and a
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
31 ## discrete system. The @acronym{SISO} system is difficult to control because
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
32 ## it is non-minimum-phase and unstable. The second design example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
33 ## controls the @command{jet707} plant, the linearized state space model of a
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
34 ## Boeing 707-321 aircraft at @var{v}=80 m/s
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
35 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
36 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
37 ## ($M = 0.26$, $G_{a0} = -3^{\circ}$, ${\alpha}_0 = 4^{\circ}$, ${\kappa}= 50^{\circ}$).
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
38 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
39 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
40 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
41 ## (@var{M} = 0.26, @var{Ga0} = -3 deg, @var{alpha0} = 4 deg, @var{kappa} = 50 deg).
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
42 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
43 ## Inputs: (1) thrust and (2) elevator angle
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
44 ## Outputs: (1) airspeed and (2) pitch angle. The discrete system is a
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
45 ## stable and second order.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
46 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
47 ## @table @asis
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
48 ## @item @acronym{SISO} plant:
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
49 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
50 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
51 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
52 ## $$ G(s) = { s-2 \over (s+2) (s-1) } $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
53 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
54 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
55 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
56 ## @example
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
57 ## @group
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
58 ## s - 2
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
59 ## G(s) = --------------
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
60 ## (s + 2)(s - 1)
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
61 ## @end group
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
62 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
63 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
64 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
65 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
66 ## @group
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
67 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
68 ## +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
69 ## -------------------->| W1 |---> v1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
70 ## z | +----+
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
71 ## ----|-------------+
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
72 ## | |
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
73 ## | +---+ v y +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
74 ## u *--->| G |--->O--*-->| W2 |---> v2
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
75 ## | +---+ | +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
76 ## | |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
77 ## | +---+ |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
78 ## -----| K |<-------
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
79 ## +---+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
80 ## @end group
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
81 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
82 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
83 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
84 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
85 ## $$ { \rm min } \Vert T_{vz} \Vert _\infty $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
86 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
87 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
88 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
89 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
90 ## min || T ||
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
91 ## vz infty
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
92 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
93 ## @end ifinfo
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
94 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
95 ## @var{W1} und @var{W2} are the robustness and performance weighting
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
96 ## functions.
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
97 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
98 ## @item @acronym{MIMO} plant:
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
99 ## The optimal controller minimizes the
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
100 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
101 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
102 ## $ { \cal H }_\infty $
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
103 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
104 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
105 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
106 ## H-infinity
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
107 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
108 ## norm of the
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
109 ## augmented plant @var{P} (mixed-sensitivity problem):
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
110 ## @example
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
111 ## @group
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
112 ## w
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
113 ## 1 -----------+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
114 ## | +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
115 ## +---------------------->| W1 |----> z1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
116 ## w | | +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
117 ## 2 ------------------------+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
118 ## | | |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
119 ## | v +----+ v +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
120 ## +--*-->o-->| G |-->o--*-->| W2 |---> z2
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
121 ## | +----+ | +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
122 ## | |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
123 ## ^ v
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
124 ## u y (to K)
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
125 ## (from controller K)
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
126 ## @end group
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
127 ## @end example
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
128 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
129 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
130 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
131 ## $$ \left [ \matrix{ z_1 \cr
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
132 ## z_2 \cr
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
133 ## y } \right ] =
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
134 ## P \left [ \matrix{ w_1 \cr
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
135 ## w_2 \cr
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
136 ## u } \right ] $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
137 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
138 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
139 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
140 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
141 ## @group
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
142 ## + + + +
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
143 ## | z | | w |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
144 ## | 1 | | 1 |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
145 ## | z | = [ P ] * | w |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
146 ## | 2 | | 2 |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
147 ## | y | | u |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
148 ## + + + +
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
149 ## @end group
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
150 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
151 ## @end ifinfo
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
152 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
153 ## @item Discrete system:
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
154 ## This is not a true discrete design. The design is carried out
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
155 ## in continuous time while the effect of sampling is described by
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
156 ## a bilinear transformation of the sampled system.
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
157 ## This method works quite well if the sampling period is ``small''
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
158 ## compared to the plant time constants.
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
159 ##
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
160 ## @item The continuous plant:
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
161 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
162 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
163 ## $$ G(s) = { 1 \over (s+2)(s+1) } $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
164 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
165 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
166 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
167 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
168 ## @example
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
169 ## @group
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
170 ## 1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
171 ## G (s) = --------------
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
172 ## k (s + 2)(s + 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
173 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
174 ## @end group
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
175 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
176 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
177 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
178 ## is discretised with a @acronym{ZOH} (Sampling period = @var{Ts} = 1 second):
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
179 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
180 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
181 ## $$ G(z) = { 0.199788z + 0.073498 \over (z - 0.36788) (z - 0.13534) } $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
182 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
183 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
184 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
185 ## @example
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
186 ## @group
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
187 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
188 ## 0.199788z + 0.073498
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
189 ## G(z) = --------------------------
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
190 ## (z - 0.36788)(z - 0.13534)
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
191 ## @end group
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
192 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
193 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
194 ##
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
195 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
196 ## @group
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
197 ##
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
198 ## +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
199 ## -------------------->| W1 |---> v1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
200 ## z | +----+
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
201 ## ----|-------------+
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
202 ## | |
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
203 ## | +---+ v +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
204 ## *--->| G |--->O--*-->| W2 |---> v2
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
205 ## | +---+ | +----+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
206 ## | |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
207 ## | +---+ |
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
208 ## -----| K |<-------
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
209 ## +---+
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
210 ## @end group
5016
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
211 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
212 ## @iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
213 ## @tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
214 ## $$ { \rm min } \Vert T_{vz} \Vert _\infty $$
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
215 ## @end tex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
216 ## @end iftex
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
217 ## @ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
218 ## @example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
219 ## min || T ||
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
220 ## vz infty
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
221 ## @end example
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
222 ## @end ifinfo
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
223 ## @var{W1} and @var{W2} are the robustness and performance weighting
bdbee5282954 [project @ 2004-09-22 02:50:35 by jwe]
jwe
parents: 3430
diff changeset
224 ## functions.
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
225 ## @end table
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
226 ## @end deftypefn
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
227
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
228 ## Author: Kai P. Mueller <mueller@ifr.ing.tu-bs.de>
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
229 ## Created: April 30, 1998
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
230
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
231 yn = [];
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
232 while (length(yn) < 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
233 yn = input(" * [s]iso, [m]imo, or [d]iscrete design? [no default]: ","S");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
234 endwhile
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
235 if ((yn(1) == "s") | (yn(1) == 'S'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
236 sys_type = 1;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
237 elseif ((yn(1) == "m") | (yn(1) == 'M'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
238 sys_type = 2;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
239 elseif ((yn(1) == "d") | (yn(1) == 'D'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
240 sys_type = 3;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
241 else
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
242 disp(" *** no system type specified, hinfdemo terminated.");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
243 return;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
244 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
245
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
246 echo off
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
247 switch (sys_type)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
248
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
249 case (1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
250 ## siso
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
251 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
252 disp(" ----------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
253 disp(" H_infinity optimal control for the SISO plant:");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
254 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
255 disp(" s - 2");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
256 disp(" G(s) = --------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
257 disp(" (s + 2)(s - 1)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
258 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
259 disp(" ----------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
260 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
261
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
262 ## weighting on actuator u
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
263 W1 = wgt1o(0.05, 100.0, 425.0);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
264 ## weighting on controlled variable y
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
265 W2 = wgt1o(10.0, 0.05, 0.001);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
266 ## plant
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
267 G = tf2sys([1 -2],[1 1 -2]);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
268
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
269 ## need One as the pseudo transfer function One = 1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
270 One = ugain(1);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
271 disp(" o forming P...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
272 psys = buildssic([1 4;2 4;3 1],[3],[2 3 5],[3 4],G,W1,W2,One);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
273 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
274 disp(" o controller design...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
275 [K, gfin, GW]=hinfsyn(psys, 1, 1, 0.1, 10.0, 0.02);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
276 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
277 disp("-- OK ----------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
278
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
279 disp(" Closed loop poles:");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
280 damp(GW);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
281 ## disp(" o Testing H_infinity norm: (hinfnorm does not work)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
282 ## hinfnorm(GW);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
283
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
284 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
285 yn = input(" * Plot closed loop step response? [n]: ","S");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
286 if (length(yn) >= 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
287 if ((yn(1) == "y") || (yn(1) == 'Y'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
288 disp(" o step responses of T and KS...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
289 GW = buildssic([1 2; 2 1], [], [1 2], [-2], G, K);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
290 figure(1);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
291 step(GW, 1, 10);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
292 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
293 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
294
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
295 case (2)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
296 ## mimo
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
297 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
298 disp(" -----------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
299 disp(" H_inf optimal control for the jet707 plant");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
300 disp(" -----------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
301 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
302
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
303 ## Weighting function on u (robustness weight)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
304 ww1 = wgt1o(0.01,5,0.9);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
305 ww2 = wgt1o(0.01,5,2.2);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
306 W1 = buildssic([1 0;2 0],[],[1 2],[1 2],ww1,ww2);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
307 ## Weighting function on y (performance weight)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
308 ww1 = wgt1o(250,0.1,0.0001);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
309 ww2 = wgt1o(250,0.1,0.0002);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
310 W2 = buildssic([1 0;2 0],[],[1 2],[1 2],ww1,ww2);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
311 ## plant (2 x 2 system)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
312 G = jet707;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
313
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
314 disp(" o forming P...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
315 One = ugain(2);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
316 Clst = [1 7; 2 8; 3 7; 4 8; 5 1; 6 2];
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
317 P = buildssic(Clst,[5 6],[3:6 9 10],[1 2 5:8],G,W1,W2,One);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
318
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
319 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
320 disp(" o controller design...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
321 K = hinfsyn(P, 2, 2, 0.25, 10.0, 0.005);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
322
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
323 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
324 yn = input(" * Plot closed loop step responses? [n]: ","S");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
325 if (length(yn) >= 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
326 if ((yn(1) == "y") || (yn(1) == 'Y'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
327 disp(" o step responses of T and KS...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
328 GW = buildssic([1 3;2 4;3 1;4 2],[],[1 2 3 4],[-3 -4],G,K);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
329
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
330 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
331 disp(" FIGURE 1: speed refence => 1, pitch angle ref. => 0");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
332 disp(" ===================================================");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
333 disp(" y1: speed (should be 1)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
334 disp(" y2: pitch angle (should remain 0)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
335 disp(" y3: thrust (should be a slow transient)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
336 disp(" y6: elevator (should be a faster transient)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
337 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
338 disp(" FIGURE 2: speed refence => 0, pitch angle ref. => 1");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
339 disp(" ===================================================");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
340 disp(" y1: speed (should remain 0)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
341 disp(" y2: pitch angle (should be 1)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
342 disp(" y3: thrust (should be a slow transient)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
343 disp(" y6: elevator (should be a faster transient)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
344 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
345 figure(1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
346 step(GW);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
347 figure(2)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
348 step(GW,2);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
349 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
350 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
351
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
352 case (3)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
353 ## discrete
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
354 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
355 disp(" --------------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
356 disp(" Discrete H_infinity optimal control for the plant:");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
357 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
358 disp(" 0.199788z + 0.073498");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
359 disp(" G(s) = --------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
360 disp(" (z - 0.36788)(z - 0.13533)");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
361 disp(" --------------------------------------------------");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
362 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
363
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
364 ## sampling time
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
365 Ts = 1.0;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
366 ## weighting on actuator value u
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
367 W1 = wgt1o(0.1, 200.0, 50.0);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
368 ## weighting on controlled variable y
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
369 W2 = wgt1o(350.0, 0.05, 0.0002);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
370 ## omega axis
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
371 ww = logspace(-4.99, 3.99, 100);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
372 if (columns(ww) > 1); ww = ww'; endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
373
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
374 ## continuous plant
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
375 G = tf2sys(2,[1 3 2]);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
376 ## discrete plant with zoh
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
377 Gd = c2d(G, Ts);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
378 ## w-plane (continuous representation of the sampled system)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
379 Gw = d2c(Gd, "bi");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
380
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
381 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
382 disp(" o building P...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
383 ## need One as the pseudo transfer function One = 1
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
384 One = ugain(1);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
385 psys = buildssic([1 4;2 4;3 1],[3],[2 3 5],[3 4],Gw,W1,W2,One);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
386 disp(" o controller design...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
387 [K, gfin, GWC] = hinfsyn(psys, 1, 1, 0.1, 10.0, 0.02);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
388
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
389 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
390 fig_n = 1;
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
391 yn = input(" * Plot magnitudes of W1KS and W2S? [n]: ","S");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
392 if (length(yn) >= 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
393 if ((yn(1) == "y") || (yn(1) == 'Y'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
394 disp(" o magnitudes of W1KS and W2S...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
395 gwx = sysprune(GWC, 1, 1);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
396 mag1 = bode(gwx, ww);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
397 if (columns(mag1) > 1); mag1 = mag1'; endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
398 gwx = sysprune(GWC, 2, 1);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
399 mag2 = bode(gwx, ww);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
400 if (columns(mag2) > 1); mag2 = mag2'; endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
401 figure(fig_n)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
402 fig_n = fig_n + 1;
5215
32c569794216 [project @ 2005-03-16 18:54:42 by jwe]
jwe
parents: 5016
diff changeset
403 __gnuplot_set__ grid
3430
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
404 loglog(ww, [mag1 mag2]);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
405 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
406 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
407
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
408 Kd = c2d(K, "bi", Ts);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
409 GG = buildssic([1 2; 2 1], [], [1 2], [-2], Gd, Kd);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
410 disp(" o closed loop poles...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
411 damp(GG);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
412
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
413 disp(" ");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
414 yn = input(" * Plot closed loop step responses? [n]: ","S");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
415 if (length(yn) >= 1)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
416 if ((yn(1) == "y") || (yn(1) == 'Y'))
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
417 disp(" o step responses of T and KS...");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
418 figure(fig_n)
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
419 step(GG, 1, 10);
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
420 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
421 endif
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
422
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
423 endswitch
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
424
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
425 disp(" o hinfdemo terminated successfully.");
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
426
65b3519ac3a1 [project @ 2000-01-14 03:44:03 by jwe]
jwe
parents:
diff changeset
427 ## KPM-hinfdemo/End