This is machine translation

Translated by Microsoft
Mouse over text to see original. Click the button below to return to the English verison of the page.


Nyquist plot of frequency response


[re,im,w] = nyquist(sys)
[re,im] = nyquist(sys,w)
[re,im,w,sdre,sdim] = nyquist(sys)


nyquist creates a Nyquist plot of the frequency response of a dynamic system model. When invoked without left-hand arguments, nyquist produces a Nyquist plot on the screen. Nyquist plots are used to analyze system properties including gain margin, phase margin, and stability.

nyquist(sys) creates a Nyquist plot of a dynamic system sys. This model can be continuous or discrete, and SISO or MIMO. In the MIMO case, nyquist produces an array of Nyquist plots, each plot showing the response of one particular I/O channel. The frequency points are chosen automatically based on the system poles and zeros.

nyquist(sys,w) explicitly specifies the frequency range or frequency points to be used for the plot. To focus on a particular frequency interval, set w = {wmin,wmax}. To use particular frequency points, set w to the vector of desired frequencies. Use logspace to generate logarithmically spaced frequency vectors. Frequencies must be in rad/TimeUnit, where TimeUnit is the time units of the input dynamic system, specified in the TimeUnit property of sys.

nyquist(sys1,sys2,...,sysN) or nyquist(sys1,sys2,...,sysN,w) superimposes the Nyquist plots of several LTI models on a single figure. All systems must have the same number of inputs and outputs, but may otherwise be a mix of continuous- and discrete-time systems. You can also specify a distinctive color, linestyle, and/or marker for each system plot with the syntax nyquist(sys1,'PlotStyle1',...,sysN,'PlotStyleN').

[re,im,w] = nyquist(sys) and [re,im] = nyquist(sys,w) return the real and imaginary parts of the frequency response at the frequencies w (in rad/TimeUnit). re and im are 3-D arrays (see "Arguments" below for details).

[re,im,w,sdre,sdim] = nyquist(sys) also returns the standard deviations of re and im for the identified system sys.


The output arguments re and im are 3-D arrays with dimensions

(number of outputs) × (number of inputs) × (length of w)

For SISO systems, the scalars re(1,1,k) and im(1,1,k) are the real and imaginary parts of the response at the frequency ωk = w(k).


For MIMO systems with transfer function H(s), re(:,:,k) and im(:,:,k) give the real and imaginary parts of H(k) (both arrays with as many rows as outputs and as many columns as inputs). Thus,


where hij is the transfer function from input j to output i.


Nyquist Plot of Dynamic System

Plot the Nyquist response of the system


H = tf([2 5 1],[1 2 3]);

The nyquist function has support for M-circles, which are the contours of the constant closed-loop magnitude. M-circles are defined as the locus of complex numbers where


is a constant value. In this equation, ω is the frequency in radians/TimeUnit, where TimeUnit is the system time units, and G is the collection of complex numbers that satisfy the constant magnitude requirement.

To activate the grid, select Grid from the right-click menu or type


at the MATLAB® prompt. This figure shows the M circles for transfer function H.

You have two zoom options available from the right-click menu that apply specifically to Nyquist plots:

  • Tight —Clips unbounded branches of the Nyquist plot, but still includes the critical point (-1, 0)

  • On (-1,0) — Zooms around the critical point (-1,0)

Also, click anywhere on the curve to activate data markers that display the real and imaginary values at a given frequency. This figure shows the nyquist plot with a data marker.

Nyquist Plot of Identified Model with Response Uncertainty

Compute the standard deviation of the real and imaginary parts of frequency response of an identified model. Use this data to create a 3σ plot of the response uncertainty. (Identified models require System Identification Toolbox™.)

Identify a transfer function model based on data. Obtain the standard deviation data for the real and imaginary parts of the frequency response.

load iddata2 z2;
sys_p = tfest(z2,2);
w = linspace(-10*pi,10*pi,512);
[re, im, ~, sdre, sdim] = nyquist(sys_p,w);

sys_p is an identified transfer function model. sdre and sdim contain 1-std standard deviation uncertainty values in re and im respectively.

Create a Nyquist plot showing the response and its uncertainty:

re = squeeze(re);
im = squeeze(im); 
sdre = squeeze(sdre);
sdim = squeeze(sdim);
plot(re,im,'b', re+3*sdre, im+3*sdim, 'k:', re-3*sdre, im-3*sdim, 'k:')

More About

collapse all


You can change the properties of your plot, for example the units. For information on the ways to change properties of your plots, see Ways to Customize Plots.


See bode.

Introduced before R2006a

Was this topic helpful?