@@ -2069,6 +2069,18 @@ def gangof4_response(
2069
2069
Linear input/output systems (process and control).
2070
2070
omega : array
2071
2071
Range of frequencies (list or bounds) in rad/sec.
2072
+ omega_limits : array_like of two values
2073
+ Set limits for plotted frequency range. If Hz=True the limits are
2074
+ in Hz otherwise in rad/s. Specifying ``omega`` as a list of two
2075
+ elements is equivalent to providing ``omega_limits``. Ignored if
2076
+ data is not a list of systems.
2077
+ omega_num : int
2078
+ Number of samples to use for the frequeny range. Defaults to
2079
+ config.defaults['freqplot.number_of_samples']. Ignored if data is
2080
+ not a list of systems.
2081
+ Hz : bool, optional
2082
+ If True, when computing frequency limits automatically set
2083
+ limits to full decades in Hz instead of rad/s.
2072
2084
2073
2085
Returns
2074
2086
-------
@@ -2123,11 +2135,60 @@ def gangof4_response(
2123
2135
2124
2136
2125
2137
def gangof4_plot (
2126
- P , C , omega = None , omega_limits = None , omega_num = None , ** kwargs ):
2127
- """Legacy Gang of 4 plot; use gangof4_response().plot() instead."""
2128
- return gangof4_response (
2129
- P , C , omega = omega , omega_limits = omega_limits ,
2130
- omega_num = omega_num ).plot (** kwargs )
2138
+ * args , omega = None , omega_limits = None , omega_num = None ,
2139
+ Hz = False , ** kwargs ):
2140
+ """Plot the response of the "Gange of 4" transfer functions for a system.
2141
+
2142
+ Plots a 2x2 frequency response for the "Gang of 4" sensitivity
2143
+ functions [T, PS; CS, S]. Can be called in one of two ways:
2144
+
2145
+ gangof4_plot(response[, ...])
2146
+ gangof4_plot(P, C[, ...])
2147
+
2148
+ Parameters
2149
+ ----------
2150
+ response : FrequencyPlotData
2151
+ Gang of 4 frequency response from `gangof4_response`.
2152
+ P, C : LTI
2153
+ Linear input/output systems (process and control).
2154
+ omega : array
2155
+ Range of frequencies (list or bounds) in rad/sec.
2156
+ omega_limits : array_like of two values
2157
+ Set limits for plotted frequency range. If Hz=True the limits are
2158
+ in Hz otherwise in rad/s. Specifying ``omega`` as a list of two
2159
+ elements is equivalent to providing ``omega_limits``. Ignored if
2160
+ data is not a list of systems.
2161
+ omega_num : int
2162
+ Number of samples to use for the frequeny range. Defaults to
2163
+ config.defaults['freqplot.number_of_samples']. Ignored if data is
2164
+ not a list of systems.
2165
+ Hz : bool, optional
2166
+ If True, when computing frequency limits automatically set
2167
+ limits to full decades in Hz instead of rad/s.
2168
+
2169
+ Returns
2170
+ -------
2171
+ response : :class:`~control.FrequencyResponseData`
2172
+ Frequency response with inputs 'r' and 'd' and outputs 'y', and 'u'
2173
+ representing the 2x2 matrix of transfer functions in the Gang of 4.
2174
+
2175
+ """
2176
+ if len (args ) == 1 and isinstance (arg , FrequencyResponseData ):
2177
+ if any ([kw is not None
2178
+ for kw in [omega , omega_limits , omega_num , Hz ]]):
2179
+ raise ValueError (
2180
+ "omega, omega_limits, omega_num, Hz not allowed when "
2181
+ "given a Gang of 4 response as first argument" )
2182
+ return args [0 ].plot (kwargs )
2183
+ else :
2184
+ if len (args ) > 3 :
2185
+ raise TypeError (
2186
+ f"expecting 2 or 3 positional arguments; received { len (args )} " )
2187
+ omega = omega if len (args ) < 3 else args [2 ]
2188
+ args = args [0 :2 ]
2189
+ return gangof4_response (
2190
+ * args , omega = omega , omega_limits = omega_limits ,
2191
+ omega_num = omega_num , Hz = Hz ).plot (** kwargs )
2131
2192
2132
2193
#
2133
2194
# Singular values plot
0 commit comments