---
title: "NyquistPlot"
language: "en"
type: "Symbol"
summary: "NyquistPlot[lsys] generates a Nyquist plot of the transfer function for the system lsys. NyquistPlot[lsys, {\\[Omega]min, \\[Omega]max}] plots for the frequency range \\[Omega]min to \\[Omega]max. NyquistPlot[expr, {\\[Omega], \\[Omega]min, \\[Omega]max}] plots expr using the variable \\[Omega]."
keywords: 
- Nyquist plot
- Nyquist
- absolute stability problem
- Lure problem
- Lur'e problem
- passivity theorem
- circle criterion
- Nyquist stability criterion
- exponential stability
- encirclements
- feedback sector
- feedback path contains a memoryless nonlinearity
- decompose system into a linear and nonlinear part
- linear system stability
- nonlinear system stability
- frequency response characteristics
- sinusoidal transfer function
- phase margin
- gain margin
- bandwidth
- gain crossover frequency
- phase crossover frequency
- classical control
- control systems
- control theory
- nyquist
canonical_url: "https://reference.wolfram.com/language/ref/NyquistPlot.html"
source: "Wolfram Language Documentation"
related_guides: 
  - 
    title: "Classical Analysis and Design"
    link: "https://reference.wolfram.com/language/guide/ClassicalAnalysisAndDesign.en.md"
  - 
    title: "Fourier Analysis"
    link: "https://reference.wolfram.com/language/guide/FourierAnalysis.en.md"
  - 
    title: "Control Systems"
    link: "https://reference.wolfram.com/language/guide/ControlSystems.en.md"
  - 
    title: "Integral Transforms"
    link: "https://reference.wolfram.com/language/guide/IntegralTransforms.en.md"
  - 
    title: "Delay Control Systems"
    link: "https://reference.wolfram.com/language/guide/DelayControlSystems.en.md"
related_functions: 
  - 
    title: "NyquistGridLines"
    link: "https://reference.wolfram.com/language/ref/NyquistGridLines.en.md"
  - 
    title: "NicholsPlot"
    link: "https://reference.wolfram.com/language/ref/NicholsPlot.en.md"
  - 
    title: "BodePlot"
    link: "https://reference.wolfram.com/language/ref/BodePlot.en.md"
  - 
    title: "GainPhaseMargins"
    link: "https://reference.wolfram.com/language/ref/GainPhaseMargins.en.md"
  - 
    title: "TransferFunctionModel"
    link: "https://reference.wolfram.com/language/ref/TransferFunctionModel.en.md"
---
# NyquistPlot

NyquistPlot[lsys] generates a Nyquist plot of the transfer function for the system lsys.

NyquistPlot[lsys, {ωmin, ωmax}] plots for the frequency range ωmin to ωmax.

NyquistPlot[expr, {ω, ωmin, ωmax}] plots expr using the variable ω.

## Details and Options

* ``NyquistPlot`` gives the complex-plane plot of the transfer function of ``lsys`` as the Nyquist contour is traversed.

* The system ``lsys`` can be ``TransferFunctionModel`` or ``StateSpaceModel``, including descriptor and delay systems.

* For continuous-time systems, the Nyquist contour encloses the entire right half-plane and excludes poles on the imaginary axis. It is traversed in a clockwise direction.

* For discrete-time systems, the Nyquist contour is the unit circle, and it encloses poles on the unit circle. It is traversed in a counterclockwise direction.

* The arrows on the ``NyquistPlot`` show the direction the Nyquist contour is traversed.

* The Nyquist contours:

[image]

* For a system ``lsys`` with the corresponding transfer function $g(s)$, the following expressions are plotted:

|                                                           |                                                                            |
| --------------------------------------------------------- | -------------------------------------------------------------------------- |
| $g(i \omega )$              | continuous-time system                                                     |
| $g(\exp (i \tau  \omega ))$ | discrete-time system with sample time $\tau$ |

* If the frequency range is not specified, the entire Nyquist contour is traversed, effectively $-\infty <\omega <\infty$ for continuous-time systems, and $-\pi /\tau <\omega <\pi /\tau$ for discrete-time systems.

* ``NyquistPlot`` treats the variable ``ω`` as local, effectively using ``Block``.

* The Nyquist plot can be used to infer the number of unstable poles $z$ of the closed-loop system as $z=n+p$, where $p$ is the number of unstable poles of the open-loop system, and $n$ is the number of clockwise encirclements of the point $\{-1,0\}$. »

[image]

* The Nyquist plot can be used to infer global exponential stability of linear systems with nonlinear feedback $u=-\phi (y)$, where $\phi$ satisfies a sector constraint $a y\leq \phi (y)\leq b y$ when $0<a\leq b$. The closed-loop system is stable if $z=n+p=0$, where $n$ is the number of clockwise encirclements of the disk $$\fbox{$\text{Disk}$}[\{-(\text{\textit{$b$}}+\text{\textit{$a$}})/(2 \text{\textit{$a$}} \text{\textit{$b$}}),0\},\fbox{$\text{Abs}$}[(\text{\textit{$b$}}-\text{\textit{$a$}})/(2
\text{\textit{$a$}} \text{\textit{$b$}})]]$$, and $p$ is the number of open-loop unstable poles. »

[image]

* ``NyquistPlot`` has the same options as ``Graphics``, with the following additions and changes: []

|                        |                   |                                                                   |
| ---------------------- | ----------------- | ----------------------------------------------------------------- |
| Axes                   | True              | whether to draw axes                                              |
| ColorFunction          | Automatic         | how to apply coloring to the curve                                |
| ColorFunctionScaling   | True              | whether to scale arguments to ColorFunction                       |
| EvaluationMonitor      | None              | expression to evaluate at every evaluation                        |
| Exclusions             | True              | frequencies to exclude                                            |
| ExclusionsStyle        | Automatic         | what to draw at excluded frequencies                              |
| FeedbackSector         | None              | the sector limits for feedback function                           |
| FeedbackSectorStyle    | Automatic         | style for feedback sector disk                                    |
| FeedbackType           | "Negative"        | the feedback type                                                 |
| MaxRecursion           | Automatic         | maximum recursive subdivisions allowed                            |
| Mesh                   | Automatic         | how many mesh divisions to draw                                   |
| MeshFunctions          | {#3&}             | placement of mesh divisions                                       |
| MeshShading            | Automatic         | how to shade regions between mesh points                          |
| MeshStyle              | Automatic         | the style for mesh divisions                                      |
| NyquistGridLines       | None              | the Nyquist grid lines to draw                                    |
| PerformanceGoal        | \$PerformanceGoal | aspects of performance to try to optimize                         |
| PlotLegends            | None              | legends for curves                                                |
| PlotPoints             | Automatic         | iniitial number of sample frequencies                             |
| PlotRange              | Automatic         | real and imaginary range of values                                |
| PlotStyle              | Automatic         | graphics directives to specify the style of the plot              |
| PlotTheme              | \$PlotTheme       | overall theme for the plot                                        |
| RegionFunction         | Automatic         | how to determine if a point should be included                    |
| SamplingPeriod         | None              | the sampling period                                               |
| StabilityMargins       | False             | whether to show the stability margins                             |
| StabilityMarginsStyle  | Automatic         | graphics directives to specify the style of the stability margins |
| WorkingPrecision       | MachinePrecision  | the precision used in internal computations                       |

* ``ColorData["DefaultPlotColors", 1]`` gives the default color used by ``PlotStyle``.

* The setting ``Exclusions -> True`` excludes frequencies, including resonant frequencies, where the sinusoidal transfer function is discontinuous.

* ``Exclusions -> {f1, f2, …}`` excludes specific frequencies ``fi``.

* ``ExclusionsStyle -> s`` specifies that style ``s`` should be used to render the curve joining opposite ends of each excluded point.

* Points corresponding to exclusions at resonant frequencies are joined by semicircles at infinity.

* ``FeedbackSector -> {a, b}`` indicates feedback $u=-\phi (y)$ with $a y\leq \phi (y)\leq b y$.

### List of all options

|                        |                   |                                                                                    |
| ---------------------- | ----------------- | ---------------------------------------------------------------------------------- |
| AlignmentPoint         | Center            | the default point in the graphic to align with                                     |
| AspectRatio            | Automatic         | ratio of height to width                                                           |
| Axes                   | True              | whether to draw axes                                                               |
| AxesLabel              | None              | axes labels                                                                        |
| AxesOrigin             | Automatic         | where axes should cross                                                            |
| AxesStyle              | {}                | style specifications for the axes                                                  |
| Background             | None              | background color for the plot                                                      |
| BaselinePosition       | Automatic         | how to align with a surrounding text baseline                                      |
| BaseStyle              | {}                | base style specifications for the graphic                                          |
| ColorFunction          | Automatic         | how to apply coloring to the curve                                                 |
| ColorFunctionScaling   | True              | whether to scale arguments to ColorFunction                                        |
| ContentSelectable      | Automatic         | whether to allow contents to be selected                                           |
| CoordinatesToolOptions | Automatic         | detailed behavior of the coordinates tool                                          |
| Epilog                 | {}                | primitives rendered after the main plot                                            |
| EvaluationMonitor      | None              | expression to evaluate at every evaluation                                         |
| Exclusions             | True              | frequencies to exclude                                                             |
| ExclusionsStyle        | Automatic         | what to draw at excluded frequencies                                               |
| FeedbackSector         | None              | the sector limits for feedback function                                            |
| FeedbackSectorStyle    | Automatic         | style for feedback sector disk                                                     |
| FeedbackType           | "Negative"        | the feedback type                                                                  |
| FormatType             | TraditionalForm   | the default format type for text                                                   |
| Frame                  | False             | whether to put a frame around the plot                                             |
| FrameLabel             | None              | frame labels                                                                       |
| FrameStyle             | {}                | style specifications for the frame                                                 |
| FrameTicks             | Automatic         | frame ticks                                                                        |
| FrameTicksStyle        | {}                | style specifications for frame ticks                                               |
| GridLines              | None              | grid lines to draw                                                                 |
| GridLinesStyle         | {}                | style specifications for grid lines                                                |
| ImageMargins           | 0.                | the margins to leave around the graphic                                            |
| ImagePadding           | All               | what extra padding to allow for labels etc.                                        |
| ImageSize              | Automatic         | the absolute size at which to render the graphic                                   |
| LabelStyle             | {}                | style specifications for labels                                                    |
| MaxRecursion           | Automatic         | maximum recursive subdivisions allowed                                             |
| Mesh                   | Automatic         | how many mesh divisions to draw                                                    |
| MeshFunctions          | {#3&}             | placement of mesh divisions                                                        |
| MeshShading            | Automatic         | how to shade regions between mesh points                                           |
| MeshStyle              | Automatic         | the style for mesh divisions                                                       |
| Method                 | Automatic         | details of graphics methods to use                                                 |
| NyquistGridLines       | None              | the Nyquist grid lines to draw                                                     |
| PerformanceGoal        | \$PerformanceGoal | aspects of performance to try to optimize                                          |
| PlotLabel              | None              | an overall label for the plot                                                      |
| PlotLegends            | None              | legends for curves                                                                 |
| PlotPoints             | Automatic         | iniitial number of sample frequencies                                              |
| PlotRange              | Automatic         | real and imaginary range of values                                                 |
| PlotRangeClipping      | False             | whether to clip at the plot range                                                  |
| PlotRangePadding       | Automatic         | how much to pad the range of values                                                |
| PlotRegion             | Automatic         | the final display region to be filled                                              |
| PlotStyle              | Automatic         | graphics directives to specify the style of the plot                               |
| PlotTheme              | \$PlotTheme       | overall theme for the plot                                                         |
| PreserveImageOptions   | Automatic         | whether to preserve image options when displaying new versions of the same graphic |
| Prolog                 | {}                | primitives rendered before the main plot                                           |
| RegionFunction         | Automatic         | how to determine if a point should be included                                     |
| RotateLabel            | True              | whether to rotate y labels on the frame                                            |
| SamplingPeriod         | None              | the sampling period                                                                |
| StabilityMargins       | False             | whether to show the stability margins                                              |
| StabilityMarginsStyle  | Automatic         | graphics directives to specify the style of the stability margins                  |
| Ticks                  | Automatic         | axes ticks                                                                         |
| TicksStyle             | {}                | style specifications for axes ticks                                                |
| WorkingPrecision       | MachinePrecision  | the precision used in internal computations                                        |

---

## Examples (91)

### Basic Examples (5)

A Nyquist plot of a transfer-function model:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{10*(1 + 3*s)*(1 + 4*s)}}, 
  (1 + s)*(2 + s)*(5 + s)*(6 + s)}, 
 s]]

Out[1]= [image]
```

---

A Nyquist plot of a system with resonant frequencies:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1 + s}}, 4 + s^2}, s]]

Out[1]= [image]
```

---

A Nyquist plot of a discrete-time system:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

A discrete-time system with resonant frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -1 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Another discrete-time system with resonant frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, (-1 + z)*
   (1 + z + z^2)}, z, SamplingPeriod -> 1]]

Out[1]= [image]
```

### Scope (24)

#### Basic Uses (11)

Nyquist plot of a continuous-time system:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{10}}, (1 + 2*s)*(1 + 3*s)}, s, 
 SamplingPeriod -> None, SystemsModelLabels -> None]]

Out[1]= [image]
```

---

Nyquist plot of another continuous-time system:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{10 + s}}, (1 + s)*(100 + s)^2}, 
 s]]

Out[1]= [image]
```

---

Specify the frequency range:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{s}}, 3 + s}, s], {-5, 5}]

Out[1]= [image]
```

---

Nyquist plot of a discrete-time system:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Nyquist plot of a continuous-time, transfer-function model:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{2 + s^2}}, (1 + s)^2}, s]]

Out[1]= [image]
```

---

Discrete-time, transfer-function model:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{3*(-0.25 + z)}}, 
  (-2 + z)*(-0.5 + z)}, z, SamplingPeriod -> 0.5], AspectRatio -> 1]

Out[1]= [image]
```

---

Nyquist plot of a state-space model:

```wl
In[1]:=
NyquistPlot[StateSpaceModel[{{{0, 1, 0}, {0, 0, 1}, {8, -12, 6}}, {{0}, {0}, {1}}, {{3, Rational[-5, 2], 2}}, 
  {{Rational[1, 4]}}}, SamplingPeriod -> None, SystemsModelLabels -> None]]

Out[1]= [image]
```

---

The Nyquist plots of systems with resonant frequencies have encirclements at infinity:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + 10*s}}, s^2*(1 + s)}, 
 s]]

Out[1]= [image]

In[2]:=
NyquistPlot[TransferFunctionModel[{{{1 + s}}, s*(1 + s^2)*
   (4 + s^2)*(16 + s^4)}, s]]

Out[2]= [image]

In[3]:=
NyquistPlot[TransferFunctionModel[{{{1 + z}}, (-1 + z)^2}, z, 
 SamplingPeriod -> 0.1]]

Out[3]= [image]
```

---

An improper system with resonant frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{(-4 + s)*(5 + s)*(6 + s)*
     (-9 + s^2)}}, (1 + s)*(4 + s^2)}, s]]

Out[1]= [image]
```

---

A system with a time delay:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1.}}, 0.8/E^(5.*s) + s}, s] ]

Out[1]= [image]
```

---

Specify the expression of the sinusoidal transfer function of a system:

```wl
In[1]:= NyquistPlot[(f + 0.1 I/40 + 4 I f - 10 f^2 - I f^3), f]

Out[1]= [image]
```

#### Linear System Stability (7)

There are no unstable open-loop poles ($p=0$):

```wl
In[1]:=
lsys = TransferFunctionModel[{{{1}}, (1 + (Complex[0, -1])*Sqrt[5] + s)*
   (1 + Complex[0, 1]*Sqrt[5] + s)}, s];
```

The plot shows that $\{-1,0\}$ is not encircled ($n=0$):

```wl
In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

Hence the closed-loop system is stable ($z=n+p=0$); all poles are stable:

```wl
In[3]:= SystemsModelFeedbackConnect[lsys]

Out[3]=
TransferFunctionModel[{{{1}}, {{7 + 2*s + s^2}}}, s, 
 SamplingPeriod -> Automatic]

In[4]:= TransferFunctionPoles[%]//N

Out[4]= {{{-1. - 2.44949 I, -1. + 2.44949 I}}}
```

---

Here $p=0$ and $n=1$, and hence $z=n+p=1$:

```wl
In[1]:= lsys = TransferFunctionModel[{{{2*(-1 + s)}}, 1 + s}, s];

In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

Here $z=1$, i.e. one unstable pole in the closed-loop system:

```wl
In[3]:= TransferFunctionPoles@SystemsModelFeedbackConnect[lsys]//N

Out[3]= {{{0.333333}}}
```

---

Here $p=0$ and $n=2$, and hence $z=n+p=2$:

```wl
In[1]:= lsys = TransferFunctionModel[{{{2}}, s^2*(1 + s)}, s];

In[2]:= NyquistPlot[lsys, PlotRange -> {{-2, 2}, Automatic}]

Out[2]= [image]
```

The closed-loop system has two unstable poles:

```wl
In[3]:= TransferFunctionPoles@SystemsModelFeedbackConnect[lsys]//N

Out[3]= {{{-1.69562, 0.34781  - 1.02885 I, 0.34781  + 1.02885 I}}}
```

---

Now $p=1$, and $\{-1,0\}$ is encircled counterclockwise, so $n=-1$, and hence $z=n+p=0$ :

```wl
In[1]:= lsys = TransferFunctionModel[{{{5 + s}}, -3 + s}, s];

In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

The closed-loop system has no unstable poles:

```wl
In[3]:= TransferFunctionPoles@SystemsModelFeedbackConnect[lsys]//N

Out[3]= {{{-1.}}}
```

---

For positive feedback, count encirclement around $\{1,0\}$; here $p=0$, $n=2$:

```wl
In[1]:=
lsys = TransferFunctionModel[{{{2*(2.5 - s + s^2)}}, 
  1 + (1.5 + s)^2}, s];

In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

There are $z=n+p=2$ unstable poles in the closed-loop system:

```wl
In[3]:= TransferFunctionPoles@SystemsModelFeedbackConnect[lsys, +1]//N

Out[3]= {{{0.37868, 4.62132}}}
```

---

A discrete-time system with no unstable poles ($p=0$):

```wl
In[1]:=
lsys = TransferFunctionModel[{{{(-0.7 + z)*z}}, 
  (-0.9 + z)*(0.3 + z)}, z, SamplingPeriod -> 1];
```

There are no encirclements of $\{-1,0\}$ ($n=0$):

```wl
In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

Hence the closed-loop system is stable ($z=n+p=0$):

```wl
In[3]:= TransferFunctionPoles@SystemsModelFeedbackConnect[lsys]

Out[3]= {{{-0.165535, 0.815535}}}
```

---

A stable discrete-time system ($p=0$) with positive feedback:

```wl
In[1]:=
lsys = TransferFunctionModel[{{{0.5 + z}}, (-0.3 + z)*(0.6 + z^2)}, 
 z, SamplingPeriod -> 1];
```

There is one clockwise encirclement of $\{1,0\}$ ($n=1$) :

```wl
In[2]:= NyquistPlot[lsys]

Out[2]= [image]
```

The closed-loop system is unstable, with one pole outside the unit circle:

```wl
In[3]:=
TransferFunctionPoles@SystemsModelFeedbackConnect[lsys, 1]
Map[Abs, %, 3]

Out[3]= {{{-0.427742 - 0.636816 I, -0.427742 + 0.636816 I, 1.15548}}}

Out[3]= {{{0.767136, 0.767136, 1.15548}}}
```

#### Nonlinear System Stability (6)

Starting with a stable linear system ($p=0$):

```wl
In[1]:=
lsys = TransferFunctionModel[{{{1 + s}}, 1 + 3*s + s^2}, 
 s];

In[2]:= TransferFunctionPoles@lsys//N

Out[2]= {{{-2.61803, -0.381966}}}
```

Using feedback $u=-\phi (y)$, where $1 y\leq \phi (y)\leq 3 y$ it is also true that $n=0$, since the disk is not encircled:

```wl
In[3]:= NyquistPlot[lsys, FeedbackSector -> {1, 3}]

Out[3]= [image]
```

Simulate closed-loop system constant feedback $u=-a y$ for $1\leq a\leq 3$:

```wl
In[4]:= responses = Table[OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 10}], {a, Range[1, 3, 0.5]}];

In[5]:= Plot[responses, {t, 0, 10}, PlotRange -> All]

Out[5]= [image]
```

---

The following stable system ($p=0$) has one clockwise encirclement ($n=1$) of the disk for feedback in the sector $(1.5,25)$ :

```wl
In[1]:= lsys = TransferFunctionModel[{{{1 - s}}, 1 + s}, s];

In[2]:= NyquistPlot[lsys, FeedbackSector -> {1.5, 25}]

Out[2]= [image]
```

Hence the closed-loop system is unstable for any feedback in that sector:

```wl
In[3]:= Table[Plot[Evaluate@OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 1}], {t, 0, 1}], {a, {1.5, 10, 25}}];

In[4]:= GraphicsRow[%, ImageSize -> Medium]

Out[4]= [image]
```

---

An unstable system ($p=1$):

```wl
In[1]:=
lsys = TransferFunctionModel[{{{5 + s^2}}, (-1 + s)*(3 + s)}, 
 s];
```

With a feedback configuration that has one counterclockwise encirclement ($n=-1$):

```wl
In[2]:= NyquistPlot[lsys, FeedbackSector -> {1, 2}]

Out[2]= [image]
```

The closed-loop system is stable with any feedback in the sector:

```wl
In[3]:= responses = Table[OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 12}], {a, Range[1, 2, 0.2]}];

In[4]:= Plot[responses, {t, 0, 12}, PlotRange -> All]

Out[4]= [image]
```

---

A stable system has feedback in the sector $\{0,20\}$, and its ``NyquistPlot`` is to the right of $-1/20$ :

```wl
In[1]:=
lsys = TransferFunctionModel[{{{1 + s}}, (2 + s)*(3 + s)}, 
 s];

In[2]:= NyquistPlot[lsys, FeedbackSector -> {0, 20}]

Out[2]= [image]
```

The closed loop is stable for any feedback in the sector $\{0,20\}$ :

```wl
In[3]:= responses = Table[OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 4}], {a, Range[0, 20, 4]}];

In[4]:= Plot[responses, {t, 0, 4}, PlotRange -> All]

Out[4]= [image]
```

---

A stable system:

```wl
In[1]:=
lsys = TransferFunctionModel[{{{1 + s}}, 1 + 3*s + s^2}, 
 s];
```

The ``NyquistPlot`` lies within the circle for feedback in the sector $\{-0.9,5\}$ :

```wl
In[2]:= NyquistPlot[lsys, FeedbackSector -> {-0.9, 5}]

Out[2]= [image]
```

The closed loop is stable for any feedback within the sector $\{-0.9,5\}$ :

```wl
In[3]:= responses = Table[Plot[Evaluate@OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 100}], {t, 0, 100}, PlotRange -> All], {a, {-0.9, 5}}];

In[4]:= GraphicsRow[responses, ImageSize -> Medium]

Out[4]= [image]
```

---

A stable system ``lsys`` with feedback in the sector $\{-7,-4\}$ :

```wl
In[1]:=
lsys = TransferFunctionModel[{{{0.1*(1 - s)}}, 1 + 2*s + s^2}, 
 s];
```

The ``NyquistPlot`` of ``-lsys`` with feedback in the sector $\{4,7\}$ shows a stable closed-loop system:

```wl
In[2]:=
NyquistPlot[TransferFunctionModel[{{{-0.1*(1 - s)}}, 1 + 2*s + s^2}, 
 s], FeedbackSector -> {4, 7}]

Out[2]= [image]
```

Simulate the closed loop with constant feedback:

```wl
In[3]:= responses = Table[OutputResponse[SystemsModelFeedbackConnect[lsys, TransferFunctionModel[{{{a}}, 1}, s]], UnitStep[t], {t, 0, 40}], {a, Range[-7, -4, 1]}];

In[4]:= Plot[responses, {t, 0, 40}, PlotRange -> All]

Out[4]= [image]
```

### Generalizations & Extensions (1)

A Nyquist plot can be obtained from a transfer-function model or directly from its expression:

```wl
In[1]:= g = (0.3 + s/(2.5 + s)(0.5 - s));

In[2]:= {NyquistPlot[TransferFunctionModel[g, s]], NyquistPlot[g]}

Out[2]= {[image], [image]}
```

### Options (58)

#### AspectRatio (4)

By default, the ratio of the height to width for the plot is determined automatically:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Make the height the same as the width with ``AspectRatio -> 1`` :

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 1]

Out[1]= [image]
```

---

Use numerical value to specify the height-to-width ratio:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 1 / 2]

Out[1]= [image]
```

---

``AspectRatio -> Full`` adjusts the height and width to tightly fit inside other constructs:

```wl
In[1]:=
plot = NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> Full];

In[2]:= {Framed[Pane[plot, {75, 100}]], Framed[Pane[plot, {100, 100}]], Framed[Pane[plot, {100, 50}]]}

Out[2]= {[image], [image], [image]}
```

#### Axes (3)

By default, ``Axes`` are drawn:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Use ``Axes -> False`` to turn off axes:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], Axes -> False]

Out[1]= [image]
```

---

Turn each axis on individually:

```wl
In[1]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], Axes -> {True, False}], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], Axes -> {False, True}]}

Out[1]= {[image], [image]}
```

#### AxesLabel (4)

No axes labels are drawn by default:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Place a label on the $y$ axis:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesLabel -> Im[z]]

Out[1]= [image]
```

---

Specify axes labels:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesLabel -> {Re[z], Im[z]}]

Out[1]= [image]
```

---

Use labels based on variables specified in ``NyquistPlot`` :

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesLabel -> Automatic]

Out[1]= [image]
```

#### AxesOrigin (2)

The position of the axes is determined automatically:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1]]

Out[1]= [image]
```

---

Specify an explicit origin for the axes:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesOrigin -> {1, 0}]

Out[1]= [image]
```

#### AxesStyle (4)

Change the style for the axes:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesStyle -> Red]

Out[1]= [image]
```

---

Specify the style of each axis:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesStyle -> {{Thick, Red}, {Thick, Blue}}]

Out[1]= [image]
```

---

Use different styles for the ticks and the axes:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesStyle -> Green, TicksStyle -> Black]

Out[1]= [image]
```

---

Use different styles for the labels and the axes:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AxesStyle -> Green, LabelStyle -> Black]

Out[1]= [image]
```

#### CoordinatesToolOptions (1)

Obtain magnitude and phase (in degrees) by selecting the graphic and typing a period (.):

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{10}}, (2 + s)*(2.5 + s)*(3 + s)}, 
 s], CoordinatesToolOptions -> {"DisplayFunction" -> Function[pt, {Norm[pt], (Arg[First[pt] + I Last[pt]]/°)}]}]

Out[1]= [image]

In[2]:= NyquistPlot[TransferFunctionModel[{{{5}}, s*(1 + 5*s)}, s], CoordinatesToolOptions -> {"DisplayFunction" -> Function[pt, Switch[pt, {_ ? NumericQ, _ ? NumericQ}, {Norm@pt, Arg[First@pt + I Last@pt] / Degree}, _, {Infinity, Indeterminate}]]}]

Out[2]= [image]
```

#### Exclusions (5)

By default, there are no exclusions for a system with no resonant frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{s}}, (1 + s)*(6 + s)}, 
 s]]

Out[1]= [image]
```

---

Exclude the point corresponding to 0.75:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Exclusions -> 0.75, ExclusionsStyle -> Directive[Thick, Red]]

Out[1]= [image]
```

---

Exclude multiple frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{-3 + s}}, (6 + s)*
   (3 + 2*s + s^2)}, s], Exclusions -> {0.3, 0.5, 0.7}, ExclusionsStyle -> Directive[Thick, Red]]

Out[1]= [image]
```

---

Resonant frequencies correspond to semicircles of infinite radius:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{3 + s}}, 25 + s^2}, s]]

Out[1]= [image]
```

---

Exclude only one of the resonant frequencies:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{3 + s}}, 25 + s^2}, s], Exclusions -> {5}]

Out[1]= [image]
```

#### ExclusionsStyle (2)

Specify the style of the exclusions:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1}}, s^3*(1 + s)*(16 + s^2)}, 
 s], ExclusionsStyle -> Directive[Dashed, Red]]

Out[1]= [image]
```

---

A Nyquist plot without the infinite encirclements:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1}}, 1 + z + z^2}, z, 
 SamplingPeriod -> 1], ExclusionsStyle -> None]

Out[1]= [image]
```

#### FeedbackSector (4)

Stable configurations:

```wl
In[1]:= Table[NyquistPlot[TransferFunctionModel[{{{2}}, (1 + s)*(2 + s)}, s], FeedbackSector -> f, PlotLabel -> "Feedback Sector: " <> ToString[f]], {f, {{0.1, 10}, {0, 1}, {-1, 1}}}];

In[2]:= TableForm[%, TableSpacing -> {6, Automatic}]

Out[2]//TableForm=
|         |
| :------ |
| [image] |
| [image] |
| [image] |
```

---

The stable configuration of a system that is unstable:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{2*(3 + s)}}, (-1 + s)*(2 + s)}, 
 s], FeedbackSector -> {0.4, 2}]

Out[1]= [image]
```

---

An unstable configuration:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{2*(6 + s)}}, (-1 + s)*(2 + s)}, 
 s], FeedbackSector -> {0.1, 20}]

Out[1]= [image]
```

---

With feedback gain 0.1, the system is stable:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{30}}, (0.5 + s)*(1 + s)^2}, s], FeedbackSector -> {0.1, 0.1}]

Out[1]= [image]
```

Rescale the gains to use the Nyquist stability criterion:

```wl
In[2]:= NyquistPlot[TransferFunctionModel[{{{3}}, (0.5 + s)*(1 + s)^2}, s], FeedbackSector -> {1, 1}]

Out[2]= [image]
```

#### FeedbackSectorStyle (1)

Specify the style of the graphics generated by the circle criterion:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{(4 + s)*(6 + s)}}, 
  (-4 + s)*(-3 + s)}, s], FeedbackSector -> {-2, 1}, FeedbackSectorStyle -> Directive[Thick, Green]]

Out[1]= [image]
```

#### ImageSize (7)

Use named sizes such as ``Tiny``, ``Small``, ``Medium`` and ``Large`` :

```wl
In[1]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> Tiny], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> Small]}

Out[1]= {[image], [image]}
```

---

Specify the width of the plot:

```wl
In[1]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> 150], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 1.5, ImageSize -> 150]}

Out[1]= {[image], [image]}
```

Specify the height of the plot:

```wl
In[2]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> {Automatic, 150}], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 2, ImageSize -> {Automatic, 150}]}

Out[2]= {[image], [image]}
```

---

Allow the width and height to be up to a certain size:

```wl
In[1]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> UpTo[200]], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 2, ImageSize -> UpTo[200]]}

Out[1]= {[image], [image]}
```

---

Specify the width and height for a graphic, padding with space if necessary:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> {200, 200}, Background -> LightBlue]

Out[1]= [image]
```

Setting ``AspectRatio -> Full`` will fill the available space:

```wl
In[2]:=
NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> Full, ImageSize -> {200, 200}, Background -> LightBlue]

Out[2]= [image]
```

---

Use maximum sizes for the width and height:

```wl
In[1]:=
{NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> {UpTo[150], UpTo[100]}], NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> 2, ImageSize -> {UpTo[150], UpTo[100]}]}

Out[1]= {[image], [image]}
```

---

Use ``ImageSize -> Full`` to fill the available space in an object:

```wl
In[1]:=
Framed[Pane[NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], ImageSize -> Full, Background -> LightBlue], {200, 100}]]

Out[1]= [image]
```

---

Specify the image size as a fraction of the available space:

```wl
In[1]:=
Framed[Pane[NyquistPlot[TransferFunctionModel[{{{z}}, -0.5 + z}, z, 
 SamplingPeriod -> 1], AspectRatio -> Full, ImageSize -> {Scaled[0.5], Scaled[0.5]}, Background -> LightBlue], {200, 100}]]

Out[1]= [image]
```

#### NyquistGridLines (2)

Automatically chosen values of closed-loop magnitude and phase:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1}}, (1 + s)*(3 + s)*(6 + s)}, 
 s], NyquistGridLines -> Automatic]

Out[1]= [image]
```

---

Draw specific contours:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + 10*s}}, 1 + 2*s + s^2}, 
 s], NyquistGridLines -> {{0.6, 0.7, 0.8}, Range[-20, 20, 4] Degree}]

Out[1]= [image]
```

#### PlotLegends (4)

Use placeholder legends for multiple systems:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1, s}}, 
  {{1 - 2*s + s^2, 1 + 2*s + s^2}}}, 
 s], PlotLegends -> Automatic]

Out[1]= [image]
```

---

Use the systems as the legend text:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + s, -1 + s}}, 
  {{1 - 2*s + s^2, 1 + 2*s + s^2}}}, 
 s], PlotLegends -> "Expressions"]

Out[1]= [image]
```

---

Use ``LineLegend`` to add an overall legend label:

```wl
In[1]:=
NyquistPlot[Table[TransferFunctionModel[{{{1}}, 1 + s^2 + 2*s*ζ}, 
 s], {ζ, 0.2, 0.8, 0.2}], PlotLegends -> LineLegend[Range[0.2, 0.8, 0.2], LegendLabel -> "ζ"]]

Out[1]= [image]
```

---

Place the legend above the plot:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + s, -1 + s}}, 
  {{1 - 2*s + s^2, 1 + 2*s + s^2}}}, 
 s], PlotLegends -> Placed[{"one", "two"}, Above]]

Out[1]= [image]
```

#### PlotRange (2)

Specify the range of coordinates to include in a plot:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{2*(1 + s)}}, s*(4 + s^2)*
   (16 + s^2)}, s], PlotRange -> 0.5, PlotRangePadding -> 0]

Out[1]= [image]
```

Points at infinity are shown in the region specified by ``PlotRangePadding`` :

```wl
In[2]:=
NyquistPlot[TransferFunctionModel[{{{2*(1 + s)}}, s*(4 + s^2)*
   (16 + s^2)}, s], PlotRange -> 0.5, PlotRangePadding -> Automatic]

Out[2]= [image]

In[3]:= AbsoluteOptions[%, PlotRange]

Out[3]= {PlotRange -> {{-0.5, 0.5}, {-0.5, 0.5}}}

In[4]:= AbsoluteOptions[%%, PlotRangePadding]

Out[4]= {PlotRangePadding -> {{0.604365, 0.64353}, {0.56182, 0.64353}}}
```

---

Specify the plot range explicitly:

```wl
In[1]:= Table[NyquistPlot[TransferFunctionModel[{{{10}}, s^3}, s], PlotRange -> pr], {pr, {Automatic, 40}}]

Out[1]= {[image], [image]}

In[2]:=
Table[NyquistPlot[TransferFunctionModel[{{{2}}, (-1 + z)*(Rational[-1, 2] + z)}, 
 z, SamplingPeriod -> 1], PlotRange -> pr], {pr, {Automatic, {{-15, 5}, {-30, 30}}}}]

Out[2]= {[image], [image]}
```

#### PlotTheme (2)

Use a theme with a frame and grid lines:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + s, -1 + s}}, 
  {{1 - 2*s + s^2, 1 + 2*s + s^2}}}, 
 s], PlotTheme -> "Detailed"]

Out[1]= [image]
```

---

Change the style of the grid lines:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1 + s, -1 + s}}, 
  {{1 - 2*s + s^2, 1 + 2*s + s^2}}}, 
 s], PlotTheme -> "Detailed", GridLinesStyle -> LightGray]

Out[1]= [image]
```

#### StabilityMargins (2)

Show the stability margins:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{6}}, (2 + s)*(2 + 2*s + s^2)}, 
 s], StabilityMargins -> True, StabilityMarginsStyle -> ( Directive[Thick, #]& /@ {Green, Red})]

Out[1]= [image]
```

---

Stability margins for a system with resonant frequencies:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{1}}, s*(1 + s)*(5 + s)}, 
 s], StabilityMargins -> True, StabilityMarginsStyle -> Directive[Green, Thick], PlotRange -> {{-0.08, 0}, {-0.01, 0.01}}, PlotRangePadding -> 0]

Out[1]= [image]
```

#### StabilityMarginsStyle (1)

Specify the style of stability margins:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{6}}, (2 + s)*(2 + 2*s + s^2)}, 
 s], StabilityMargins -> True, StabilityMarginsStyle -> {Directive[Green, Thick], Red}]

Out[1]= [image]
```

#### Ticks (4)

Ticks are placed automatically in each plot:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s]]

Out[1]= [image]
```

---

Use ``Ticks -> None`` to not draw any tick marks:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Ticks -> None]

Out[1]= [image]
```

---

Place tick marks at specific positions:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Ticks -> {{-.25, .4, .7}, {-.5, -1, .5}}]

Out[1]= [image]
```

---

Draw tick marks at the specified positions with the specified labels:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Ticks -> {{{-.25, -a}, {.4, b}, {.7, c}}, {{-.5, -d}, {-1, -e}, {.5, d}}}]

Out[1]= [image]
```

#### TicksStyle (4)

Specify overall ticks style, including the tick labels:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], TicksStyle -> Directive[Bold, Red]]

Out[1]= [image]
```

---

Specify tick style for each of the axes:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], TicksStyle -> {Directive[Black, Bold], Directive[Bold, Red]}]

Out[1]= [image]
```

---

Specify tick marks with scaled lengths:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Ticks -> {{{-.25, -a, .14}, {.4, b, .75}, {.7, c, .65}}, {{-.5, -d, .7}, {-1, -e, .42}, {.5, d, .7}}}]

Out[1]= [image]
```

---

Customize each tick with position, length, labeling and styling:

```wl
In[1]:= NyquistPlot[TransferFunctionModel[{{{1}}, 1 + s + s^2}, s], Ticks -> {{{-.25, -a, .14, Directive[Red, Thick]}, {.4, b, .75, Directive[Red, Dashed]}, {.7, c, .65, Directive[Red, Thick, Dashed]}}, {{-.5, -d, .7, Directive[Blue, Thick]}, {-1, -e, .42, Directive[Blue, Dashed]}, {.5, d, .7, Directive[Blue, Thick, Dashed]}}}]

Out[1]= [image]
```

### Applications (2)

Compute gain and phase margins:

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{100}}, s*(100 + 3*s + s^2)}, 
 s], StabilityMargins -> True, StabilityMarginsStyle -> {Green, Red}];
Show[%, PlotRange -> {{-0.4, 0}, {-1, 0}}, PlotRangePadding -> 0]

Out[1]= [image]
```

---

With no encirclements of $-1$ and no poles in the right half-plane, the closed loop with unity negative feedback is stable (Nyquist stability criterion):

```wl
In[1]:=
NyquistPlot[TransferFunctionModel[{{{100}}, s*(100 + 3*s + s^2)}, 
 s]]

Out[1]= [image]

In[2]:= s /. NSolve[s(s^2 + 3 s + 100) + 100 == 0, s]

Out[2]= {-1.02062, -0.989691 - 9.84887 I, -0.989691 + 9.84887 I}
```

### Properties & Relations (1)

The sinusoidal transfer function of a discrete-time system is periodic:

```wl
In[1]:=
Table[NyquistPlot[TransferFunctionModel[{{{1}}, 1 + z + z^2}, z, 
 SamplingPeriod -> 1], Evaluate@freqRange], {freqRange, {{-π, π}, {-2 π, 2 π}}}]

Out[1]= {[image], [image]}
```

## See Also

* [`NyquistGridLines`](https://reference.wolfram.com/language/ref/NyquistGridLines.en.md)
* [`NicholsPlot`](https://reference.wolfram.com/language/ref/NicholsPlot.en.md)
* [`BodePlot`](https://reference.wolfram.com/language/ref/BodePlot.en.md)
* [`GainPhaseMargins`](https://reference.wolfram.com/language/ref/GainPhaseMargins.en.md)
* [`TransferFunctionModel`](https://reference.wolfram.com/language/ref/TransferFunctionModel.en.md)

## Related Guides

* [Classical Analysis and Design](https://reference.wolfram.com/language/guide/ClassicalAnalysisAndDesign.en.md)
* [Fourier Analysis](https://reference.wolfram.com/language/guide/FourierAnalysis.en.md)
* [Control Systems](https://reference.wolfram.com/language/guide/ControlSystems.en.md)
* [Integral Transforms](https://reference.wolfram.com/language/guide/IntegralTransforms.en.md)
* [Delay Control Systems](https://reference.wolfram.com/language/guide/DelayControlSystems.en.md)

## History

* [Introduced in 2010 (8.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn80.en.md) \| [Updated in 2012 (9.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn90.en.md) ▪ [2014 (10.0)](https://reference.wolfram.com/language/guide/SummaryOfNewFeaturesIn100.en.md)