# normalize

Linear coordinate transformation of the variables of a dmss model.

## Contents

- Syntax
- Examples
- References
- See also

## Syntax

sys = normalize(sys,stateCurrentRange, stateTargetRange, inputCurrentRange, inputTargetRange, algebraicCurrentRange, algebraicTargetRange) Linear coordinate transformation of the variables (states x, inputs u, algebraic variables y) of a dmss model, based of current and target ranges, parse as matrices where the first column is the lower limit and the second column is the upper limit. The rows correspond to the different variables xi, ui and yi.

[sys, stateOffset, stateSlope, inputOffset, inputSlope, algebraicOffset, algebraicSlope] = normalize(sys,stateCurrentRange, stateTargetRange, inputCurrentRange, inputTargetRange, algebraicCurrentRange, algebraicTargetRange) Additional outputs with information of the offsets and slopes of the linear coordinate transformation.

## Examples

The following set of equations describe a simple HVAC system

    Eq = ["9.03*11.33*3.4*1.225*xp1 - y4 - y2 = 0";...
          "9.03*11.33*3.4*1.225*xp2 - y3 = 0";...
          "x1 - 1006*y1 - 2501*10^3*x2 - 1860*x2*y1 = 0";...
          "y2 + u1*x1 - 1006*u1*u2 - 2501*10^3*u1*u3 - 1860*u1*u2*u3 = 0";...
          "y3 - u1*u3 + u1*x2 = 0";...
          "y4 + (2*(9.03+11.33)*3.4 + 9.03*11.33*3)*u4 - (2*(9.03+11.33)*3.4 + 9.03*11.33*3)*y1 = 0"];

which can be converted into a continuous-time dmss model by

    sys = sym2dmss(Eq, 0)

    Reduced by 5 column(s) and 0 equation(s) with trivial Reduction due to duplications.

    sys =

      dmss with properties:

                    H: [1×1 hyCPN1]
                    n: 2
                    m: 4
                    p: 4
          outputIndex: [1×1 struct]
                  nEq: 6
            stateName: [0×0 string]
            stateUnit: [0×0 string]
        algebraicName: [0×0 string]
        algebraicUnit: [0×0 string]
            inputName: [0×0 string]
            inputUnit: [0×0 string]
                   ts: 0

which serves as an example system.

The model can variables can be scaled e.g. to values between -1 and 1. Therefore the current and target ranges of the different variables need to be defined. If a variable shouldn't be scaled the current and target ranges must be the same. Also it is important that lower and upper limit are not equal, e.g. [0, 0]. If a whole variable type shouldn't be scaled, in this example the inputs, the matrices can be left empty.

    stateCurrentRange = [0, 1e5; 0, 0.025];
    stateTargetRange = [-1 1; -1 1];

    algebraicCurrentRange = [-20, 50; -10e6, 10e6; -1, 1; -1e5, 1e5];
    algebraicTargetRange = [-1 1; -1 1; -1 1; -1 1];

    inputCurrentRange = [];
    inputTargetRange = [];

    [sysNorm, stateOffset, stateSlope, inputOffset, inputSlope, algebraicOffset, algebraicSlope] = normalize(sys,stateCurrentRange, stateTargetRange, inputCurrentRange, inputTargetRange, algebraicCurrentRange, algebraicTargetRange);

Now the system can be simulated (keeping the slopes and offsets in mind for the initial states)

    t = [0, 60];
    x0 = ([75000; 0.018] - stateOffset')./stateSlope';
    u = [150/1.225, 18, 0.01, 32] .* ones(length(t),1);
    rng(100)
    u = u .* (0.9 + rand(size(u))/10);

    simout = dmsim(sysNorm, x0, t, u);

    Seperation in 1 subset(s) with 6 subproblem(s), from which 6 are explicit solvable.

The results can be plotted by accessing the properties of the simulation object

    figure()
    plot(simout.tsim, simout.x)
    hold on
    plot(simout.tsim, simout.y)
    grid on
    hold off

The signals can be scaled back by simply multiplying with the slope and adding the offset.

    x = simout.x.*stateSlope+stateOffset;
    y = simout.y.*algebraicSlope+algebraicOffset;

    figure()
    plot(simout.tsim, x)
    hold on
    plot(simout.tsim, y)
    grid on
    hold off

## References

## See also

dmss, dmsim, sym2dmss, replaceSymbolicParameters

Author(s): Torben Warnecke