|
39 | 39 | # |
40 | 40 | # $Id$ |
41 | 41 |
|
42 | | -"""Control System Library |
| 42 | +""" |
| 43 | +============================== |
| 44 | +Python Control Systems Library |
| 45 | +============================== |
43 | 46 |
|
44 | | -The Python Control System Library (control) provides common functions |
| 47 | +The Python Control Systems Library (`control`) provides common functions |
45 | 48 | for analyzing and designing feedback control systems. |
46 | 49 |
|
47 | | -Common functions |
48 | | ----------------- |
49 | | -tf create a transfer function from num, den coefficients |
50 | | -ss create a state space system from A, B, C, D matrices |
51 | | -pzk create a transfer function from pole, zero, gain |
52 | | -frd create a system description as frequency response |
53 | | -bode generate a Bode plot for a linear I/O system |
54 | | -nyquist generate a Nyquist plot for a linear I/O system |
55 | | -lqr linear quadratic regulator |
56 | | -lqe linear quadratic estimator |
| 50 | +System creation |
| 51 | +=============== |
| 52 | +.. autosummary:: |
| 53 | + :toctree: generated/ |
| 54 | +
|
| 55 | + ss |
| 56 | + tf |
| 57 | +
|
| 58 | +Frequency domain plotting |
| 59 | +========================= |
| 60 | +
|
| 61 | +.. autosummary:: |
| 62 | + :toctree: generated/ |
| 63 | +
|
| 64 | + bode |
| 65 | + bode_plot |
| 66 | + nyquist |
| 67 | + nyquist_plot |
| 68 | + gangof4 |
| 69 | + gangof4_plot |
| 70 | + nichols |
| 71 | + nichols_plot |
| 72 | +
|
| 73 | +Time domain simulation |
| 74 | +====================== |
| 75 | +
|
| 76 | +.. autosummary:: |
| 77 | + :toctree: generated/ |
| 78 | +
|
| 79 | + forced_response |
| 80 | + impulse_response |
| 81 | + initial_response |
| 82 | + step_response |
| 83 | + phase_plot |
| 84 | +
|
| 85 | +.. _time-series-convention: |
| 86 | +
|
| 87 | +Convention for Time Series |
| 88 | +-------------------------- |
| 89 | +
|
| 90 | +This is a convention for function arguments and return values that |
| 91 | +represent time series: sequences of values that change over time. It |
| 92 | +is used throughout the library, for example in the functions |
| 93 | +:func:`forced_response`, :func:`step_response`, :func:`impulse_response`, |
| 94 | +and :func:`initial_response`. |
| 95 | +
|
| 96 | +.. note:: |
| 97 | + This convention is different from the convention used in the library |
| 98 | + :mod:`scipy.signal`. In Scipy's convention the meaning of rows and columns |
| 99 | + is interchanged. Thus, all 2D values must be transposed when they are |
| 100 | + used with functions from :mod:`scipy.signal`. |
| 101 | +
|
| 102 | +Types: |
| 103 | +
|
| 104 | + * **Arguments** can be **arrays**, **matrices**, or **nested lists**. |
| 105 | + * **Return values** are **arrays** (not matrices). |
| 106 | +
|
| 107 | +The time vector is either 1D, or 2D with shape (1, n):: |
| 108 | +
|
| 109 | + T = [[t1, t2, t3, ..., tn ]] |
| 110 | +
|
| 111 | +Input, state, and output all follow the same convention. Columns are different |
| 112 | +points in time, rows are different components. When there is only one row, a |
| 113 | +1D object is accepted or returned, which adds convenience for SISO systems:: |
| 114 | +
|
| 115 | + U = [[u1(t1), u1(t2), u1(t3), ..., u1(tn)] |
| 116 | + [u2(t1), u2(t2), u2(t3), ..., u2(tn)] |
| 117 | + ... |
| 118 | + ... |
| 119 | + [ui(t1), ui(t2), ui(t3), ..., ui(tn)]] |
| 120 | +
|
| 121 | + Same for X, Y |
| 122 | +
|
| 123 | +So, U[:,2] is the system's input at the third point in time; and U[1] or U[1,:] |
| 124 | +is the sequence of values for the system's second input. |
| 125 | +
|
| 126 | +The initial conditions are either 1D, or 2D with shape (j, 1):: |
| 127 | +
|
| 128 | + X0 = [[x1] |
| 129 | + [x2] |
| 130 | + ... |
| 131 | + ... |
| 132 | + [xj]] |
| 133 | +
|
| 134 | +As all simulation functions return *arrays*, plotting is convenient:: |
| 135 | +
|
| 136 | + t, y = step(sys) |
| 137 | + plot(t, y) |
| 138 | +
|
| 139 | +The output of a MIMO system can be plotted like this:: |
| 140 | +
|
| 141 | + t, y, x = lsim(sys, u, t) |
| 142 | + plot(t, y[0], label='y_0') |
| 143 | + plot(t, y[1], label='y_1') |
| 144 | +
|
| 145 | +The convention also works well with the state space form of linear systems. If |
| 146 | +``D`` is the feedthrough *matrix* of a linear system, and ``U`` is its input |
| 147 | +(*matrix* or *array*), then the feedthrough part of the system's response, |
| 148 | +can be computed like this:: |
| 149 | +
|
| 150 | + ft = D * U |
| 151 | +
|
| 152 | +
|
| 153 | +Block diagram algebra |
| 154 | +===================== |
| 155 | +.. autosummary:: |
| 156 | + :toctree: generated/ |
| 157 | +
|
| 158 | + series |
| 159 | + parallel |
| 160 | + feedback |
| 161 | + negate |
| 162 | +
|
| 163 | +Control system analysis |
| 164 | +======================= |
| 165 | +.. autosummary:: |
| 166 | + :toctree: generated/ |
| 167 | +
|
| 168 | + dcgain |
| 169 | + evalfr |
| 170 | + freqresp |
| 171 | + margin |
| 172 | + stability_margins |
| 173 | + phase_crossover_frequencies |
| 174 | + pole |
| 175 | + zero |
| 176 | + pzmap |
| 177 | + root_locus |
| 178 | +
|
| 179 | +Matrix computations |
| 180 | +=================== |
| 181 | +.. autosummary:: |
| 182 | + :toctree: generated/ |
| 183 | +
|
| 184 | + care |
| 185 | + dare |
| 186 | + lyap |
| 187 | + dlyap |
| 188 | + ctrb |
| 189 | + obsv |
| 190 | + gram |
| 191 | +
|
| 192 | +Control system synthesis |
| 193 | +======================== |
| 194 | +.. autosummary:: |
| 195 | + :toctree: generated/ |
| 196 | +
|
| 197 | + acker |
| 198 | + lqr |
| 199 | + place |
| 200 | +
|
| 201 | +Model simplification tools |
| 202 | +========================== |
| 203 | +.. autosummary:: |
| 204 | + :toctree: generated/ |
| 205 | +
|
| 206 | + minreal |
| 207 | + balred |
| 208 | + hsvd |
| 209 | + modred |
| 210 | + era |
| 211 | + markov |
| 212 | +
|
| 213 | +Utility functions and conversions |
| 214 | +================================= |
| 215 | +.. autosummary:: |
| 216 | + :toctree: generated/ |
| 217 | +
|
| 218 | + unwrap |
| 219 | + db2mag |
| 220 | + mag2db |
| 221 | + drss |
| 222 | + isctime |
| 223 | + isdtime |
| 224 | + issys |
| 225 | + pade |
| 226 | + sample_system |
| 227 | + canonical_form |
| 228 | + reachable_form |
| 229 | + ss2tf |
| 230 | + ssdata |
| 231 | + tf2ss |
| 232 | + tfdata |
| 233 | + timebase |
| 234 | + timebaseEqual |
| 235 | +
|
57 | 236 | """ |
58 | 237 |
|
59 | 238 | # Import functions from within the control system library |
|
66 | 245 | from .lti import issiso, timebase, timebaseEqual, isdtime, isctime |
67 | 246 | from .margins import stability_margins, phase_crossover_frequencies |
68 | 247 | from .mateqn import lyap, dlyap, care, dare |
69 | | -from .modelsimp import hsvd, modred, balred, era, markov |
| 248 | +from .modelsimp import hsvd, modred, balred, era, markov, minreal |
70 | 249 | from .nichols import nichols_plot, nichols |
71 | 250 | from .phaseplot import phase_plot, box_grid |
| 251 | +from .pzmap import pzmap |
72 | 252 | from .rlocus import root_locus |
73 | 253 | from .statefbk import place, lqr, ctrb, obsv, gram, acker |
74 | 254 | from .statesp import StateSpace |
|
0 commit comments