normalize
Linear coordinate transformation of the variables of a dmss model.
Contents
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