# h2hinfsyn

Mixed H2/H synthesis with regional pole placement constraints

## Syntax

``````[K,CL,normz,info] = h2hinfsyn(P,Nmeas,Ncon,Nz2,Wz,Name,Value)``````

## Description

example

``````[K,CL,normz,info] = h2hinfsyn(P,Nmeas,Ncon,Nz2,Wz,Name,Value)``` employs LMI techniques to compute an output-feedback control law u = K(s)y for the control problem of the following illustration. The LTI plant `P` has partitioned state-space form given by$\begin{array}{c}\stackrel{˙}{x}=Ax+{B}_{1}w+{B}_{2}u,\\ {z}_{\infty }={C}_{1}x+{D}_{11}w+{D}_{12}u,\\ {z}_{2}={C}_{2}x+{D}_{21}w+{D}_{22}u,\\ y={C}_{y}x+{D}_{y1}w+{D}_{y2}u.\end{array}$The resulting controller `K`:Keeps the H∞ norm G of the transfer function from w to z∞ below the value you specify using the `Name,Value` argument `'HINFMAX'`.Keeps the H2 norm H of the transfer function from w to z2 below the value you specify using the `Name,Value` argument `'H2MAX'`.Minimizes a trade-off criterion of the form${W}_{1}{G}^{2}+{W}_{2}{H}^{2},$where W1 and W2 are the first and second entries in the vector `Wz`.Places the closed-loop poles in the LMI region that you specify using the `Name,Value` argument `'REGION'`.Use the input arguments `Nmeas`, `Ncon`, and `Nz2` to specify the number of signals in y, u, and z2, respectively. You can use additional `Name,Value` pairs to specify additional options for the computation.```

## Examples

collapse all

Given a plant, design a controller such that the poles of the closed-loop system lie in the half-plane defined by Re(s) < –1.

You can define this region for pole-placement using the interactive `lmireg` command. To do so,

1. Enter `region = lmireg` at the MATLAB® command line.

2. Enter `h` to specify a half-plane constraint.

3. Enter `l` to specify the left half-plane.

4. Enter `-1` to specify that the cutoff for the region is `x0` = –1.

5. Enter `q` to exit and create the LMI region.

The region created by this process is equivalent to the following commands. (For more information, see the `lmireg` reference page.)

```RealPart = -1; region = [-2*RealPart + 1i 1]; ```

Specify the plant model. For this example, use a two-input, three-output plant. Assume the plant contains one control signal and one measurement signal (`nmeas = ncont = 1`), and is partitioned such that these signals are the last input and output, respectively.

```A = [1 0;2 1]; B = [1 1;1 0]; C = [1 1;1 1;1 1]; D = zeros(3,2); P = ss(A,B,C,D);```

Compute a controller for `P` using the LMI region to restrict the closed-loop pole locations. Apply an ${\mathit{H}}_{2}$ norm constraint to one signal (`Nz2 = 1`) and give the ${\mathit{H}}_{2}$ and ${\mathit{H}}_{\infty }$ norms equal weight.

```ncont = 1; nmeas = 1; Nz2 = 1 ; Wz = [0 0]; [K,CL] = h2hinfsyn(P,nmeas,ncont,Nz2,Wz,'Region',region); ```
``` Solver for LMI feasibility problems L(x) < R(x) This solver minimizes t subject to L(x) < R(x) + t*I The best value of t should be negative for feasibility Iteration : Best value of t so far 1 7.368392 2 -95.362851 Result: best value of t: -95.362851 f-radius saturation: 0.009% of R = 1.00e+08 ```

Confirm that the poles of the closed-loop system have Re(s) < –1.

`pole(CL)`
```ans = 4×1 complex -1.6786 + 3.2056i -1.6786 - 3.2056i -1.5563 + 1.6678i -1.5563 - 1.6678i ```

You can push the closed-loop eigenvalues further left by changing `RealPart`. Or you can define other pole-placement regions. For instance, place the poles such that Re(s) falls in a strip of the complex plane –5 < Re(s) < –3. To define this region, use `lmireg` interactively to create `reg1` specifying Re(s) > –5, and `reg2` specifying Re(s) < –3. Then, enter `region = lmireg(reg1,reg2)` to define the intersection of these two regions. The following code is equivalent.

```LeftRealPart = -5; RightRealPart = -3; region = [-2*RightRealPart + 1i 0 1 0; 0 2*LeftRealPart + 1i 0 -1];```

Compute the new controller and confirm the locations of the closed-loop poles.

`[K,CL] = h2hinfsyn(P,nmeas,ncont,Nz2,Wz,'Region',region); `
``` Solver for LMI feasibility problems L(x) < R(x) This solver minimizes t subject to L(x) < R(x) + t*I The best value of t should be negative for feasibility Iteration : Best value of t so far 1 17.688394 2 1.074621 3 -13.502955 Result: best value of t: -13.502955 f-radius saturation: 0.048% of R = 1.00e+08 ```
`pole(CL)`
```ans = 4×1 complex -3.7864 + 4.9210i -3.7864 - 4.9210i -3.7752 + 3.6186i -3.7752 - 3.6186i ```

## Input Arguments

collapse all

Plant, specified as an LTI model such as a `tf` or `ss` model. `P` must be a continuous-time model.

Number of measurement signals, specified as a positive integer. This value is the number of signals in y.

Number of control signals, specified as a positive integer. This value is the number of signals in u.

Number of signals subject to the constraint on the H2 norm, specified as a positive integer. This value is the number of signals in z2. If the total number of outputs of `P` is `Nout`, then the first `Nout - Nz2 - Nmeas` outputs of `P` are subject to the constraint on the H norm.

Weights for H and H2 performance, specified as a 1-by-2 vector of the form `[Winf,W2]`.

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Before R2021a, use commas to separate each name and value, and enclose `Name` in quotes.

Example: `'REGION',reg,'H2MAX',1,'HINFMAX',1,'DISPLAY','on'`

Pole placement region, specified as a comma-separated pair consisting of `'REGION'` and a matrix of the form `[L,M]`. This matrix specifies the pole placement region as:

`$\left\{z:L+zM+\overline{z}{M}^{T}<0\right\}.$`

Generate the matrix using `lmireg`. The default LMI region for pole placement, specified by the empty matrix `[]`, is the open left-half plane, enforcing closed-loop stability only.

Upper bound on the H2 norm of the transfer function from w to z2, specified as a comma-separated pair consisting of `'H2MAX'` and a positive scalar value or `Inf`. The default value `Inf` is equivalent to setting the limit to zero, and causes `h2hinfsyn` to minimize the H2 norm subject to the trade-off criterion.

Example: `'H2MAX',1`

Upper bound on the H norm of the transfer function from w to z, specified as a comma-separated pair consisting of `'HINFMAX'` and a positive scalar value or `Inf`. The default value `Inf` is equivalent to setting the limit to zero, and causes `h2hinfsyn` to minimize the H norm subject to the trade-off criterion.

Example: `'HINFMAX',1`

Bound on the norm on the feedthrough matrix DK of the controller, specified as a comma-separated pair consisting of `'DKMAX'` and a nonnegative scalar value. To make the controller `K` strictly proper, set `'DKMAX'` to 0.

Example: `'DKMAX',0`

Desired relative accuracy on the optimal value of the trade-off criterion, specified as a comma-separated pair consisting of `'TOL'` and a positive scalar value.

Toggle for screen display of synthesis information, specified as a comma-separated pair consisting of `'DISPLAY'` and either `'on'` or `'off'`.

## Output Arguments

collapse all

Optimal output-feedback controller, returned as a state-space (`ss`) model with `Nmeas` inputs and `Ncon` outputs.

Closed-loop system with synthesized controller, returned as a state-space (`ss`) model. The closed-loop system is ```CL = lft(P,K)```.

Closed-loop norms, returned as a 1-by-2 vector. The entries in this vector, respectively, are:

• The H norm of the closed-loop transfer function from w to z.

• The H2 norm of the closed-loop transfer function from w to z2.

Solutions of LMI solvability conditions, returned as a structure containing the following fields:

• `R` — Solution R of LMI solvability condition

• `S` — Solution S of LMI solvability condition

## Tips

• Do not choose weighting functions with poles very close to s = 0 (z = 1 for discrete-time systems). For instance, although it might seem sensible to choose W = 1/s to enforce zero steady-state error, doing so introduces an unstable pole that cannot be stabilized, causing synthesis to fail. Instead, choose W = 1/(s + δ). The value δ must be small but not very small compared to system dynamics. For instance, for best numeric results, if your target crossover frequency is around 1 rad/s, choose δ = 0.0001 or 0.001. Similarly, in discrete time, choose sample times such that system and weighting dynamics are not more than a decade or two below the Nyquist frequency.

 Chilali, M., and P. Gahinet, “H Design with Pole Placement Constraints: An LMI Approach,” IEEE Trans. Aut. Contr., 41 (1995), pp. 358–367.

 Scherer, C., “Mixed H2/H-infinity Control,” Trends in Control: A European Perspective, Springer-Verlag (1995), pp.173–216.