pymor.models.transfer_function
¶
Module Contents¶
- class pymor.models.transfer_function.FactorizedTransferFunction(dim_input, dim_output, K, B, C, D, dK=None, dB=None, dC=None, dD=None, parameters={}, sampling_time=0, name=None)[source]¶
Bases:
TransferFunction
Transfer functions in generalized coprime factor form.
This class describes input-output systems given by a transfer function of the form \(H(s, \mu) = \mathcal{C}(s, \mu) \mathcal{K}(s, \mu)^{-1} \mathcal{B}(s, \mu) + \mathcal{D}(s, \mu)\).
- Parameters:
dim_input – The number of inputs.
dim_output – The number of outputs.
K – Functions that take
s
and return anOperator
.B – Functions that take
s
and return anOperator
.C – Functions that take
s
and return anOperator
.D – Functions that take
s
and return anOperator
.dK – Functions that take
s
and return anOperator
that is the derivative of K, B, C, D (optional).dB – Functions that take
s
and return anOperator
that is the derivative of K, B, C, D (optional).dC – Functions that take
s
and return anOperator
that is the derivative of K, B, C, D (optional).dD – Functions that take
s
and return anOperator
that is the derivative of K, B, C, D (optional).parameters – The
Parameters
of the transfer function.sampling_time –
0
if the system is continuous-time, otherwise a positive number that denotes the sampling time (in seconds).name – Name of the system.
- class pymor.models.transfer_function.TransferFunction(dim_input, dim_output, tf, dtf=None, parameters={}, sampling_time=0, presets=None, name=None)[source]¶
Bases:
pymor.core.cache.CacheableObject
,pymor.parameters.base.ParametricObject
Class for systems represented by a transfer function.
This class describes input-output systems given by a (parametrized) transfer function \(H(s, \mu)\).
- Parameters:
dim_input – The number of inputs.
dim_output – The number of outputs.
tf – The transfer function H, given by a callable that takes a complex value
s
and, if parametric, aparameter value
mu
. The result oftf(s, mu)
is aNumPy array
of shape(dim_output, dim_input)
.dtf – The complex derivative of
H
with respect tos
(optional).parameters – The
Parameters
of the transfer function.sampling_time –
0
if the system is continuous-time, otherwise a positive number that denotes the sampling time (in seconds).presets – A
dict
of preset attributes orNone
. The dict must only contain keys that correspond to attributes ofTransferFunction
such ash2_norm
.name – Name of the system.
Methods
Compute magnitudes and phases.
Draw the Bode plot for all input-output pairs.
Evaluate the derivative of the transfer function.
Evaluate the transfer function.
Evaluate the transfer function on the imaginary axis.
Compute H2 inner product with an
LTIModel
.Compute the H2-norm using quadrature.
Draw the magnitude plot.
- bode(w, mu=None, adaptive_opts=None)[source]¶
Compute magnitudes and phases.
- Parameters:
w – If
len(w) == 2
, the left and right limits used for the adaptive sampling. Otherwise, a sequence of angular frequencies at which to compute the transfer function.mu –
Parameter values
for which to evaluate the transfer function.adaptive_opts – Optional arguments for
adaptive
(ignored iflen(w) != 2
).
- Returns:
w – A sequence of angular frequencies at which the transfer function was computed (returned if
len(w) == 2
).mag – Transfer function magnitudes at frequencies in
w
,NumPy array
of shape(len(w), self.dim_output, self.dim_input)
.phase – Transfer function phases (in radians) at frequencies in
w
,NumPy array
of shape(len(w), self.dim_output, self.dim_input)
.
- bode_plot(w, mu=None, ax=None, Hz=False, dB=False, deg=True, adaptive_opts=None, input_indices=None, output_indices=None, **mpl_kwargs)[source]¶
Draw the Bode plot for all input-output pairs.
- Parameters:
w – If
len(w) == 2
, the left and right limits used for the adaptive sampling. Otherwise, a sequence of angular frequencies at which to compute the transfer function.mu –
Parameter values
for which to evaluate the transfer function.ax – Axis of shape (2 *
self.dim_output
,self.dim_input
) to which to plot. If not given,matplotlib.pyplot.gcf
is used to get the figure and create axis.Hz – Should the frequency be in Hz on the plot.
dB – Should the magnitude be in dB on the plot.
deg – Should the phase be in degrees (otherwise in radians).
adaptive_opts – Optional arguments for
adaptive
(ignored iflen(w) != 2
).input_indices – Optional argument to select specific inputs to be paired with all outputs or selected ones. If
None
, all inputs are used for plotting, otherwise, aniterable
containing the indices of the selected inputs has to be passed. The order of the plots depends on the order of the indices in theiterable
. It is possible to pass negative indices to access the inputs counting backwards.output_indices – Optional argument to select specific outputs to be paired with all inputs or selected ones. If
None
, all outputs are used for plotting, otherwise, aniterable
containing the indices of the selected outputs has to be passed. The order of the plots depends on the order of the indices in theiterable
. It is possible to pass negative indices to access the outputs counting backwards.mpl_kwargs – Keyword arguments used in the matplotlib plot function.
- Returns:
artists – List of matplotlib artists added.
- eval_dtf(s, mu=None)[source]¶
Evaluate the derivative of the transfer function.
- Parameters:
s – Laplace variable as a complex number.
mu –
Parameter values
.
- Returns:
Transfer function value as a 2D |NumPy array|.
- eval_tf(s, mu=None)[source]¶
Evaluate the transfer function.
- Parameters:
s – Laplace variable as a complex number.
mu –
Parameter values
.
- Returns:
Transfer function value as a 2D |NumPy array|.
- freq_resp(w, mu=None, adaptive_type='bode', adaptive_opts=None)[source]¶
Evaluate the transfer function on the imaginary axis.
- Parameters:
w – If
len(w) == 2
, the left and right limits used for the adaptive sampling. Otherwise, a sequence of angular frequencies at which to compute the transfer function.mu –
Parameter values
for which to evaluate the transfer function.adaptive_type – The plot type that adaptive sampling should be used for (
'bode'
,'mag'
). Ignored iflen(w) != 2
.adaptive_opts – Optional arguments for
adaptive
(ignored iflen(w) != 2
). Ifxscale
andyscale
are not set,'log'
is used.
- Returns:
w – A sequence of angular frequencies at which the transfer function was computed (returned if
len(w) == 2
).tfw – Transfer function values at frequencies in
w
,NumPy array
of shape(len(w), self.dim_output, self.dim_input)
.
- h2_inner(lti, mu=None)[source]¶
Compute H2 inner product with an
LTIModel
.Uses the inner product formula based on the pole-residue form (see, e.g., Lemma 1 in [ABG10]). It assumes that
self.tf
is defined on-lti.poles()
.- Parameters:
lti –
LTIModel
consisting ofOperators
that can be converted toNumPy arrays
. The D operator is ignored.mu –
Parameter values
.
- Returns:
inner – H2 inner product.
- h2_norm(return_norm_only=True, mu=None, **quad_kwargs)[source]¶
Compute the H2-norm using quadrature.
This method uses
scipy.integrate.quad
and makes no assumptions on the form of the transfer function. It only assumes thatself.tf
is defined over the imaginary axis.By default, the absolute error tolerance in
scipy.integrate.quad
is set to zero (see its optional argumentepsabs
). It can be changed by using theepsabs
keyword argument.- Parameters:
return_norm_only – Whether to only return the approximate H2-norm.
mu –
Parameter values
.quad_kwargs – Keyword arguments passed to
scipy.integrate.quad
.
- Returns:
norm – Computed H2-norm.
norm_relerr – Relative error estimate (returned if
return_norm_only
isFalse
andpresets
does not contain'h2_norm'
).info – Quadrature info (returned if
return_norm_only
isFalse
andfull_output
isTrue
andpresets
does not contain'h2_norm'
). Seescipy.integrate.quad
documentation for more details.
- mag_plot(w, mu=None, ax=None, ord=None, Hz=False, dB=False, adaptive_opts=None, **mpl_kwargs)[source]¶
Draw the magnitude plot.
- Parameters:
w – If
len(w) == 2
, the left and right limits used for the adaptive sampling. Otherwise, a sequence of angular frequencies at which to compute the transfer function.mu –
Parameter values
for which to evaluate the transfer function.ax – Axis to which to plot. If not given,
matplotlib.pyplot.gca
is used.ord – The order of the norm used to compute the magnitude (the default is the Frobenius norm).
Hz – Should the frequency be in Hz on the plot.
dB – Should the magnitude be in dB on the plot.
adaptive_opts – Optional arguments for
adaptive
(ignored iflen(w) != 2
).mpl_kwargs – Keyword arguments used in the matplotlib plot function.
- Returns:
out – List of matplotlib artists added.