# nyquist

nyquist plot

## Calling Sequence

                nyquist( sl,[fmin,fmax] [,step] [,comments] [,symmetry])
                nyquist( sl, frq [,comments] [,symmetry])
                nyquist(frq,db,phi [,comments] [,symmetry])
                nyquist(frq, repf [,comments] [,symmetry])

## Arguments

sl

  a continuous or discrete time SIMO linear dynamical system ( see: syslin).

fmin,fmax

  real scalars (frequency lower and upper bounds (in Hz)).

step

  real (logarithmic discretization step), if not given an adaptative discretization is used.

comments

  string vector (captions).

symmetry

  a boolean, default value is %t.

frq

  vector or matrix of frequencies (in Hz) (one row for each output of `sl`).

db,phi

  real matrices of modulus (in dB) and phases (in degree) (one row for each output of `sl`).

repf

  matrix of complex numbers. Frequency response (one row for each output of `sl`)

## Description

Nyquist plot i.e Imaginary part versus Real part of the frequency response of `sl`. If the `symmetry` argument is true or omitted the Nyquist plot displays the symetric graph (positive and negative frequencies).

For continuous time systems `sl(2*%i*%pi*w)` is plotted. For discrete time system or discretized systems `sl(exp(2*%i*%pi*w*fd)` is used ( `fd=1` for discrete time systems and `fd=sl('dt')` for discretized systems )

`sl` can be a continuous-time or discrete-time SIMO system (see `syslin`). In case of multi-output the outputs are plotted with different symbols.

The frequencies are given by the bounds `fmin,fmax` (in Hz) or by a row-vector (or a matrix for multi-output) `frq`.

`step` is the ( logarithmic ) discretization step. (see `calfrq` for the choice of default value).

`comments` is a vector of character strings (captions).

`db,phi` are the matrices of modulus (in Db) and phases (in degrees). (One row for each response).

`repf` is a matrix of complex numbers. One row for each response.

Default values for `fmin` and `fmax` are `1.d-3`, `1.d+3` if `sl` is continuous-time or `1.d-3`, `0.5`/sl.dt (nyquist frequency) if `sl` is discrete-time.

Automatic discretization of frequencies is made by calfrq.

To obtain the value of the frequency at a selected point(s) you can activate the datatips manager and click the desired point on the nyquist curve(s).

## Graphics entities organization

The `nyquist` function creates a compound object for each SISO system. The following piece of code allows to get the handle on the compound object of the ith system:

        ax=gca();//handle on current axes
        hi=ax.children($+i-1)// the handle on the compound object of the ith system

This compound object has two children: a compound object that defines the small arrows (a compound of small polylines) and the curve labels (a compound of texts) and a polyline which is the curve itself. The following piece of code shows how one can customize a particular nyquist curve display.

        hi.children(1).visible='off'; //hides the arrows and labels
        hi.children(2).thickness=2; //make the curve thicker

## Examples

        //Nyquist curve
        s=poly(0,'s')
        h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01));
        h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225))
        clf();    nyquist(h1)
        // add a datatip
        ax=gca();
        h_h=ax.children($).children(2);//handle on Nyquist curve of h
        tip=datatipCreate(h_h,[1.331,0.684]);
        datatipSetOrientation(tip,"upper left");

s=poly(0,'s') h=syslin('c',(s^2+2*0.9*10*s+100)/(s^2+2*0.3*10.1*s+102.01)); h1=h*syslin('c',(s^2+2*0.1*15.1*s+228.01)/(s^2+2*0.9*15*s+225)) nyquist(h1) ax=gca(); h_h=ax.children($).children(2); tip=datatipCreate(h_h,[1.331,0.684]); datatipSetOrientation(tip,"upper left");

        //Hall chart as a grid for nyquist
        s=poly(0,'s');
        Plant=syslin('c',16000/((s+1)*(s+10)*(s+100)));
        //two degree of freedom PID
        tau=0.2;xsi=1.2;
        PID=syslin('c',(1/(2*xsi*tau*s))*(1+2*xsi*tau*s+tau^2*s^2));
        clf();
        nyquist([Plant;Plant*PID],0.5,100,["Plant";"Plant and PID corrector"]);
        hallchart(colors=color('light gray')*[1 1])
        //move the caption in the lower rigth corner
        ax=gca();Leg=ax.children(1);
        Leg.legend_location="in_upper_left";

s=poly(0,'s'); Plant=syslin('c',16000/((s+1)*(s+10)*(s+100))); tau=0.2;xsi=1.2; PID=syslin('c',(1/(2*xsi*tau*s))*(1+2*xsi*tau*s+tau^2*s^2)); clf(); nyquist([Plant;Plant*PID],0.5,100,["Plant";"Plant and PID corrector"]); hallchart(colors=color('light gray')*[1 1]) ax=gca();Leg=ax.children(1); Leg.legend_location="in_upper_left";

## See Also

- syslin
- bode
- black
- nyquistfrequencybounds
- calfrq
- freq
- repfreq
- phasemag
- datatips