DynamicSystems - Maple Programming Help

Home : Support : Online Help : Science and Engineering : Dynamic Systems : System Manipulation Tools : DynamicSystems/NormHinf

DynamicSystems

 NormHinf
 Compute the ${H}_{\mathrm{\infty }}$ norm of a linear system

 Calling Sequence NormHinf(sys) NormHinf(sys, eps)

Parameters

 sys - System; system object eps - (optional) nonnegative; relative accuracy. The default value is 10^(-6). opts - (optional) equation(s) of the form option = value; specify options for the NormHinf command

Options

 • output = norm or peakfreq or list of these names.

Specifies the returned values. By default, only the ${H}_{\mathrm{\infty }}$ norm is returned. If peakfreq is specified, the angular frequency (rad/s) at which the peak gain of sys occurs is returned.

 • checkstability = truefalse

True means check whether the system is stable; if it is not stable, raise a warning. False means skip the check. The default is true.

Description

 • The NormHinf command computes the ${H}_{\mathrm{\infty }}$ norm of a linear system sys, with relative accuracy eps. Both continuous-time and discrete-time systems, and both single-input single-output (SISO) and multiple-input multiple-output (MIMO) systems are supported.

Continuous-time

 • For a stable SISO linear system with transfer function $G\left(s\right)$, the ${H}_{\mathrm{\infty }}$ norm is defined in the frequency domain as:
 ${\mathrm{‖G‖}}_{\mathrm{\infty }}$ = $\underset{\mathrm{\omega }\in ℝ}{\mathrm{sup}}\left(\left|G\left(\mathrm{jω}\right)\right|\right)$
 • For a MIMO linear system with transfer function Matrix $G\left(s\right)$, the definition of ${H}_{\mathrm{\infty }}$ norm in the frequency domain is generalized to:
 ${\mathrm{‖G‖}}_{\mathrm{\infty }}$ = $\underset{\mathrm{\omega }\in ℝ}{\mathrm{sup}}\left({\mathrm{\sigma }}_{\mathrm{max}}\left(G\left(j\mathrm{\omega }\right)\right)\right)$
 where ${\mathrm{\sigma }}_{\mathrm{max}}$ is the maximum singular value.
 • In the time domain, the ${H}_{\mathrm{\infty }}$ norm of a transfer function is calculated assuming that the stable transfer function $G\left(s\right)$ has a state-space representation:
 $\stackrel{.}{x}=\mathrm{Ax}+\mathrm{Bw}$
 $y=\mathrm{Cx}+\mathrm{Dw}$
 where: ${\mathrm{A ∈ ℝ}}^{\mathrm{n×n}}$, ${\mathrm{B ∈ ℝ}}^{\mathrm{n×m}}$, ${\mathrm{C ∈ ℝ}}^{\mathrm{p×n}}$, and ${\mathrm{D ∈ ℝ}}^{\mathrm{p×m}}$, and $n$, $m$, and $p$ are the number of states, inputs and outputs of the linear system respectively.
 $G\left(s\right)=\frac{Y\left(s\right)}{W\left(s\right)}$ and $G\left(s\right)=C$. ${\left(\mathrm{sI}-A\right)}^{-1}$. $B+\mathrm{D}$, with $A$ stable (all eigenvalues of $A$ have a negative real part).
 Then the ${H}_{\mathrm{\infty }}$ norm of the transfer function Matrix $G\left(s\right)$ is ${\mathrm{‖G‖}}_{\mathrm{\infty }}<\mathrm{\gamma }$ for some $0<\mathrm{\gamma }$, not equal to a singular value of Matrix $\mathrm{D}$, if and only if ${\mathrm{\sigma }}_{\mathrm{max}}\left(H\right)<\mathrm{\gamma }$ has no eigenvalues on the imaginary axis. The Matrix $H$ is defined as:
 ${H}_{\mathrm{\gamma }}$ = $\left[\begin{array}{cc}A-{\mathrm{BR}}^{-1}{\mathrm{D}}^{T}C& -\mathrm{γB}{R}^{-1}{B}^{T}\\ {\mathrm{γC}}^{T}{S}^{-1}C& -{A}^{T}+{C}^{T}{\mathrm{DR}}^{-1}{B}^{T}\end{array}\right]$
 where $R={\mathrm{D}}^{T}·\mathrm{D}-{\mathrm{\gamma }}^{2}{I}_{m}$ and $S=\mathrm{D}·{\mathrm{D}}^{T}-{\mathrm{\gamma }}^{2}{I}_{p}$ (subscripts $m$ and $p$ indicate the dimensions of the respective identity Matrices).

Discrete-time

 • For a stable SISO linear system with transfer function $G\left(z\right)$, the ${H}_{\mathrm{\infty }}$ norm is defined in the frequency domain as:
 ${\mathrm{‖G‖}}_{\mathrm{\infty }}$ = $\underset{0\le \mathrm{\omega }<2\mathrm{\pi }}{\mathrm{sup}}\left(\left|G\left({ⅇ}^{j\mathrm{\omega }}\right)\right|\right)$
 • For a MIMO linear system with transfer function Matrix $G\left(z\right)$, the definition of ${H}_{\mathrm{\infty }}$ norm in the frequency domain is generalized to:
 ${\mathrm{‖G‖}}_{\mathrm{\infty }}$ = $\underset{0\le \mathrm{\omega }<2\mathrm{\pi }}{\mathrm{sup}}\left({\mathrm{\sigma }}_{\mathrm{max}}\left(G\left({ⅇ}^{j\mathrm{\omega }}\right)\right)\right)$
 where ${\mathrm{\sigma }}_{\mathrm{max}}$ is the maximum singular value.
 • In the time domain, the ${H}_{\mathrm{\infty }}$ norm of a transfer function is calculated assuming that the stable transfer function $G\left(z\right)$ has a state-space representation:
 $x\left(k+1\right)=\mathrm{Ax}\left(k\right)+\mathrm{Bw}\left(k\right)$
 $y\left(k\right)=\mathrm{Cx}\left(k\right)+\mathrm{Dw}\left(k\right)$
 so that $G\left(z\right)=\frac{Y\left(z\right)}{W\left(z\right)}$ and $G\left(z\right)=C$. ${\left(\mathrm{zI}-A\right)}^{-1}$. $B+\mathrm{D}$, with $A$ stable (all eigenvalues of $A$ have a magnitude less than 1).
 • The ${H}_{\mathrm{\infty }}$ norm of the transfer function Matrix $G\left(z\right)$ is calculated using the bilinear transformation, since the ${H}_{\mathrm{\infty }}$ norm for a discrete-time LTI system is preserved in the continuous-time domain under such transformation.
 • The ${H}_{\mathrm{\infty }}$ norm provides a measure of the worst-case system gain, i.e., the largest factor by which any sinusoidal input is magnified by the system. For instance, the ${H}_{\mathrm{\infty }}$ norm of the transfer function G from w (disturbance input) to y (output) provides a measure of the worst-case influence of the noise w on the output y of an LTI system.
 • For a SISO linear system, the ${H}_{\mathrm{\infty }}$ norm is the maximum gain of the frequency response of the system. In an analogous way, for a MIMO linear system, the ${H}_{\mathrm{\infty }}$ norm is the maximum gain across all inputs and outputs of the system.
 • The ${H}_{\mathrm{\infty }}$ norm of $G$ equals the peak value on the Bode magnitude plot of $G$. It also equals the distance from the origin to the farthest point on the Nyquist plot of $G$.
 • The ${H}_{\mathrm{\infty }}$ norm is finite if and only if the transfer function $G$ is proper (degree of denominator greater than or equal to degree of numerator) and has no poles on the imaginary axis (continuous-time) or on the unit circle (discrete-time).

Examples

 > with( DynamicSystems ):

Example 1 : Find the ${H}_{\mathrm{\infty }}$ norm of a continuous-time system.

 > sys1 := TransferFunction(100/(s+5)):
 > PrintSystem(sys1);
 $\left[\begin{array}{l}{\mathbf{Transfer Function}}\\ {\mathrm{continuous}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({s}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({s}\right)\right]\\ {{\mathrm{tf}}}_{{1}{,}{1}}{=}\frac{{100}}{{s}{+}{5}}\end{array}\right$ (1)
 > hinfnorm1 := NormHinf(sys1, 10^(-10));
 ${\mathrm{hinfnorm1}}{≔}{20.00000000}$ (2)
 > MagnitudePlot(sys1, decibels = false, range = 0.001..100);
 > mag := MagnitudePlot(sys1, decibels = false, range = 0.001..100, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{19.9999996000000}$ (3)

Example 2: Find the ${H}_{\mathrm{\infty }}$ norm of the system given by the following differential equation. Show the peak frequency and the norm in that order.

 > sys2 := DiffEquation(diff(diff(x(t),t),t) = -10*x(t) - diff(x(t),t) + w(t), [w(t)], [x(t)]):
 > PrintSystem(sys2);
 $\left[\begin{array}{l}{\mathbf{Diff. Equation}}\\ {\mathrm{continuous}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{w}{}\left({t}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{x}{}\left({t}\right)\right]\\ {\mathrm{de}}{=}\left[\frac{{{ⅆ}}^{{2}}}{{ⅆ}{{t}}^{{2}}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{x}{}\left({t}\right){=}{-}{10}{}{x}{}\left({t}\right){-}\frac{{ⅆ}}{{ⅆ}{t}}\phantom{\rule[-0.0ex]{0.4em}{0.0ex}}{x}{}\left({t}\right){+}{w}{}\left({t}\right)\right]\end{array}\right$ (4)
 > hinfnorm2 := NormHinf(sys2, 'output' = [peakfreq, norm]);
 ${\mathrm{hinfnorm2}}{≔}\left[{3.08220698300548}{,}{0.320256627866482}\right]$ (5)
 > MagnitudePlot(sys2, decibels = false);
 > mag := MagnitudePlot(sys2, decibels = false, output = data):
 > member(max(mag(1..-1, 2..2)), mag(1..-1, 2..2), 'p'): fHinf := mag(p);
 ${\mathrm{fHinf}}{≔}{3.079785057}$ (6)
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{0.320252649756933}$ (7)

Example 3 : Find the ${H}_{\mathrm{\infty }}$ norm of a continuous state-space MIMO system.

 > sys3 := StateSpace( <<0,0,-3>|<1,0,-4>|<0,1,-7>>, <<0,0,1>>, <<1>|<0>|<0>>, Matrix(1,1) ):
 > PrintSystem(sys3);
 $\left[\begin{array}{l}{\mathbf{State Space}}\\ {\mathrm{continuous}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right); 3 state\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({t}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({t}\right)\right]\\ {\mathrm{statevariable}}{=}\left[{\mathrm{x1}}{}\left({t}\right){,}{\mathrm{x2}}{}\left({t}\right){,}{\mathrm{x3}}{}\left({t}\right)\right]\\ {\mathrm{a}}{=}\left[\begin{array}{ccc}{0}& {1}& {0}\\ {0}& {0}& {1}\\ {-3}& {-4}& {-7}\end{array}\right]\\ {\mathrm{b}}{=}\left[\begin{array}{c}{0}\\ {0}\\ {1}\end{array}\right]\\ {\mathrm{c}}{=}\left[\begin{array}{ccc}{1}& {0}& {0}\end{array}\right]\\ {\mathrm{d}}{=}\left[\begin{array}{c}{0}\end{array}\right]\end{array}\right$ (8)
 > hinfnorm3 := NormHinf(sys3, 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm3}}{≔}\left[{0.451322261502234}{,}{0.559605319105211}\right]$ (9)
 > MagnitudePlot(sys3, decibels = false);
 > mag := MagnitudePlot(sys3, decibels = false, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{0.451320291397442}$ (10)
 > member(Hinfgraph, mag(1..-1, 2..2), 'p'): fHinf := mag(p);
 ${\mathrm{fHinf}}{≔}{0.5590478459}$ (11)

Example 4: Find the ${H}_{\mathrm{\infty }}$ norm of a continuous transfer function G(s) with .1% of tolerance.

 > sys4 := TransferFunction(Matrix([[1/(s^3+s^2+5*s+2)],[s/(s^3+s^2+5*s+2)],[(s^2)/(s^3+s^2+5*s+2)]])):
 > PrintSystem(sys4);
 $\left[\begin{array}{l}{\mathbf{Transfer Function}}\\ {\mathrm{continuous}}\\ {\mathrm{3 output\left(s\right); 1 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({s}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({s}\right){,}{\mathrm{y2}}{}\left({s}\right){,}{\mathrm{y3}}{}\left({s}\right)\right]\\ {{\mathrm{tf}}}_{{1}{,}{1}}{=}\frac{{1}}{{{s}}^{{3}}{+}{{s}}^{{2}}{+}{5}{}{s}{+}{2}}\\ {{\mathrm{tf}}}_{{2}{,}{1}}{=}\frac{{s}}{{{s}}^{{3}}{+}{{s}}^{{2}}{+}{5}{}{s}{+}{2}}\\ {{\mathrm{tf}}}_{{3}{,}{1}}{=}\frac{{{s}}^{{2}}}{{{s}}^{{3}}{+}{{s}}^{{2}}{+}{5}{}{s}{+}{2}}\end{array}\right$ (12)
 > hinfnorm4 := NormHinf(sys4, 0.001, 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm4}}{≔}\left[{1.89966130541915}{,}{2.180899209}\right]$ (13)
 > MagnitudePlot(sys4, decibels = false);
 > mag := MagnitudePlot(sys4, decibels = false, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{1.69438112239631}$ (14)
 > member(Hinfgraph, mag[3](1..-1, 2..2), 'p'): fHinf := mag[3](p);
 ${\mathrm{fHinf}}{≔}{2.184166359}$ (15)

Example 5: Find the ${H}_{\mathrm{\infty }}$ norm of a continuous transfer function matrix.

 > sys5 := TransferFunction(Matrix([[1/(s^2+s+4), 0],[0, 1/(s^2+s+4)]]) ):
 > PrintSystem(sys5);
 $\left[\begin{array}{l}{\mathbf{Transfer Function}}\\ {\mathrm{continuous}}\\ {\mathrm{2 output\left(s\right); 2 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({s}\right){,}{\mathrm{u2}}{}\left({s}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({s}\right){,}{\mathrm{y2}}{}\left({s}\right)\right]\\ {{\mathrm{tf}}}_{{1}{,}{1}}{=}\frac{{1}}{{{s}}^{{2}}{+}{s}{+}{4}}\\ {{\mathrm{tf}}}_{{2}{,}{1}}{=}{0}\\ {{\mathrm{tf}}}_{{1}{,}{2}}{=}{0}\\ {{\mathrm{tf}}}_{{2}{,}{2}}{=}\frac{{1}}{{{s}}^{{2}}{+}{s}{+}{4}}\end{array}\right$ (16)
 > hinfnorm5 := NormHinf(sys5, 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm5}}{≔}\left[{0.516398295858964}{,}{1.87082283018653}\right]$ (17)
 > MagnitudePlot(sys5, decibels = false);
 > mag := MagnitudePlot(sys5, decibels = false, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{0.516350854134402}$ (18)
 > member(Hinfgraph, mag[1](1..-1, 2..2), 'p'): fHinf := mag[1](p);
 ${\mathrm{fHinf}}{≔}{1.863838004}$ (19)

Example 6: Find the ${H}_{\mathrm{\infty }}$ norm of a continuous state-space SISO system.

 > sys6 := StateSpace(Matrix([[0,1],[-25,-0.1]]),Matrix([[0],[1]]),Matrix([[1,0]]),Matrix([[0]])):
 > PrintSystem(sys6);
 $\left[\begin{array}{l}{\mathbf{State Space}}\\ {\mathrm{continuous}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right); 2 state\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({t}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({t}\right)\right]\\ {\mathrm{statevariable}}{=}\left[{\mathrm{x1}}{}\left({t}\right){,}{\mathrm{x2}}{}\left({t}\right)\right]\\ {\mathrm{a}}{=}\left[\begin{array}{cc}{0}& {1}\\ {-25}& {-0.1}\end{array}\right]\\ {\mathrm{b}}{=}\left[\begin{array}{c}{0}\\ {1}\end{array}\right]\\ {\mathrm{c}}{=}\left[\begin{array}{cc}{1}& {0}\end{array}\right]\\ {\mathrm{d}}{=}\left[\begin{array}{c}{0}\end{array}\right]\end{array}\right$ (20)
 > hinfnorm6 := NormHinf(sys6, 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm6}}{≔}\left[{2.00010200760040}{,}{4.99949995099030}\right]$ (21)
 > MagnitudePlot(sys6, decibels = false);
 > mag := MagnitudePlot(sys6, decibels = false, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{1.99995097863956}$ (22)
 > member(Hinfgraph, mag(1..-1, 2..2), 'p'): fHinf := mag(p);
 ${\mathrm{fHinf}}{≔}{5.000110374}$ (23)

Example 7 : Find the ${H}_{\mathrm{\infty }}$ norm of a system with discrete-time transfer function shown below.

 > sys7 := TransferFunction(10*(2*z+1)/(10*z^2 + 2*z + 5), discrete, sampletime = 0.1):
 > PrintSystem(sys7);
 $\left[\begin{array}{l}{\mathbf{Transfer Function}}\\ {\mathrm{discrete; sampletime = .1}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({z}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({z}\right)\right]\\ {{\mathrm{tf}}}_{{1}{,}{1}}{=}\frac{{20}{}{z}{+}{10}}{{10}{}{{z}}^{{2}}{+}{2}{}{z}{+}{5}}\end{array}\right$ (24)
 > hinfnorm7 := NormHinf(sys7, 10^(-8), 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm7}}{≔}\left[{4.28984428905026}{,}{16.6685073027065}\right]$ (25)
 > MagnitudePlot(sys7, decibels = false, range = 0.01..Pi/sys7:-sampletime);
 > mag := MagnitudePlot(sys7, decibels = false, range = 0.01..Pi/sys7:-sampletime, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{4.289843575}$ (26)
 > member(Hinfgraph, mag(1..-1, 2..2), 'p'): fHinf := mag(p);
 ${\mathrm{fHinf}}{≔}{16.66285136}$ (27)

Example 8 : Find the ${H}_{\mathrm{\infty }}$ norm of a system with discrete-time transfer function shown below.

 > sys8 := TransferFunction([5, -14.2, 14.4, -5],[5, -12.1, 10, -2.7], discrete, sampletime=0.5):
 > PrintSystem(sys8);
 $\left[\begin{array}{l}{\mathbf{Transfer Function}}\\ {\mathrm{discrete; sampletime = .5}}\\ {\mathrm{1 output\left(s\right); 1 input\left(s\right)}}\\ {\mathrm{inputvariable}}{=}\left[{\mathrm{u1}}{}\left({z}\right)\right]\\ {\mathrm{outputvariable}}{=}\left[{\mathrm{y1}}{}\left({z}\right)\right]\\ {{\mathrm{tf}}}_{{1}{,}{1}}{=}\frac{{5.}{}{{z}}^{{3}}{-}{14.20000000}{}{{z}}^{{2}}{+}{14.40000000}{}{z}{-}{5.}}{{5.}{}{{z}}^{{3}}{-}{12.10000000}{}{{z}}^{{2}}{+}{10.}{}{z}{-}{2.700000000}}\end{array}\right$ (28)
 > hinfnorm8 := NormHinf(sys8, 'output' = [norm, peakfreq]);
 ${\mathrm{hinfnorm8}}{≔}\left[{4.63571003774221}{,}{0.615651253991577}\right]$ (29)
 > MagnitudePlot(sys8, decibels = false, range = 0.01..Pi/sys8:-sampletime);
 > mag := MagnitudePlot(sys8, decibels = false, range = 0.01..Pi/sys8:-sampletime, output = data):
 > Hinfgraph := max(mag(1..-1, 2..2));
 ${\mathrm{Hinfgraph}}{≔}{4.635634989}$ (30)
 > member(Hinfgraph, mag(1..-1, 2..2), 'p'): fHinf := mag(p);
 ${\mathrm{fHinf}}{≔}{0.6152990634}$ (31)

References

 S. Boyd, V. Balakrishnan, P. Kabamba, On computing the ${H}_{\mathrm{\infty }}$ norm of a transfer matrix, 1988.
 N. A. Bruinsma, M. Steinbuch, A fast algortihm to compute the ${H}_{\mathrm{\infty }}$-norm of a transfer function matrix, 1990.

Compatibility

 • The DynamicSystems[NormHinf] command was introduced in Maple 18.