# iconnect

Create empty `iconnect` (interconnection) objects

## Syntax

```H = iconnect
```

## Description

Interconnection objects (class `iconnect`) are an alternative to `sysic`, and are used to build complex interconnections of uncertain matrices and systems.

An `iconnect` object has 3 fields to be set by the user, `Input`, `Output` and `Equation`. `Input` and `Output` are `icsignal` objects, while `Equation`.is a cell-array of equality constraints (using `equate`) on `icsignal` objects. Once these are specified, then the `System` property is the input/output model, implied by the constraints in `Equation`. relating the variables defined in `Input` and `Output`.

## Examples

`iconnect` can be used to create the transfer matrix `M` as described in the following figure.

Create three scalar `icsignal:` ```r, e``` and `y`. Create an empty `iconnect` object, `M`. Define the output of the interconnection to be `[e; y]`, and the input to be `r`. Define two constraints among the variables: `e = r-y`, and ```y = (2/s) e```. Get the transfer function representation of the relationship between the input (`r`) and the output ```[e; y]```.

```r = icsignal(1); e = icsignal(1); y = icsignal(1); M = iconnect; M.Input = r; M.Output = [e;y]; M.Equation{1} = equate(e,r-y); M.Equation{2} = equate(y,tf(2,[1 0])*e); tf(M.System) ```

The transfer functions from input to outputs are

``` s #1: ----- s + 2 2 #2: ----- s + 2 ```

By not explicitly introducing `e`, this can be done more concisely with only one equality constraint.

```r = icsignal(1); y = icsignal(1); N = iconnect; N.Input = r; N.Output = [r-y;y]; N.Equation{1} = equate(y,tf(2,[1 0])*(r-y)); tf(N.System) ```

You have created the same transfer functions from input to outputs.

``` s #1: ----- s + 2 2 #2: ----- s + 2 ```

You can also specify uncertain, multivariable interconnections using `iconnect`. Consider two uncertain motor/generator constraints among 4 variables `[V;I;T;W]`, `V-R*I-K*W=0`, and `T=K*I`. Find the uncertain `2x2` matrix `B` so that `[V;T] = B*[W;I]`.

```R = ureal('R',1,'Percentage',[-10 40]); K = ureal('K',2e-3,'Percentage',[-30 30]); V = icsignal(1); I = icsignal(1); T = icsignal(1); W = icsignal(1); M = iconnect; M.Input = [W;I]; M.Output = [V;T]; M.Equation{1} = equate(V-R*I-K*W,iczero(1)); M.Equation{2} = equate(T,K*I); B = M.System UMAT: 2 Rows, 2 Columns K: real, nominal = 0.002, variability = [-30 30]%, 2 occurrences R: real, nominal = 1, variability = [-10 40]%, 1 occurrence B.NominalValue ans = 0.0020 1.0000 0 0.0020 ```

A simple system interconnection, identical to the system illustrated in the `sysic` reference pages. Consider a three-input, two-output state-space matrix T,

which has internal structure

```P = rss(3,2,2); K = rss(1,1,2); A = rss(1,1,1); W = rss(1,1,1); M = iconnect; noise = icsignal(1); deltemp = icsignal(1); setpoint = icsignal(1); yp = icsignal(2); rad2deg = 57.3 rad2deg = 57.3000 M.Equation{1} = equate(yp,P*[W*deltemp;A*K*[noise+yp(2);setpoint]]); M.Input = [noise;deltemp;setpoint]; M.Output = [rad2deg*yp(1);setpoint-yp(2)]; T = M.System; size(T) State-space model with 2 outputs, 3 inputs, and 6 states. ```

## Limitations

The syntax for `iconnect` objects and `icsignal`s is very flexible. Without care, you can build inefficient (i.e., nonminimal) representations where the state dimension of the interconnection is greater than the sum of the state dimensions of the components. This is in contrast to `sysic`. In `sysic`, the syntax used to specify inputs to systems (the `input_to_ListedSubSystemName` variable) forces you to include each subsystem of the interconnection only once in the equations. Hence, interconnections formed with `sysic` are componentwise minimal. That is, the state dimension of the interconnection equals the sum of the state dimensions of the components.

expand all

### Algorithms

Each equation represents an equality constraint among the variables. You choose the input and output variables, and the `imp2exp` function makes the implicit relationship between them explicit.