append
Appends multiple dmss models (diagonally).
Contents
Syntax
sys = sys1.append(sys2, sys3, ..., sysn) Appends multiple dmss models in a diagonal fashion.
Description
The decomposed tensor matrices (structure matrix sys.H.F and parameter matrix sys.H.phi) will be appended diagonally, as example:
sys.H.F.state = [sys1.H.F.state, 0; 0, sys2.H.F.state] -> similar with the other sub matrices.
sys.H.phi.equality = [sys1.H.phi.equality, 0; 0, sys2.H.phi.equality]
The number of variables of the resulting system is the sum of the number of variables of the appended systems. To connect systems via variable index matrices, they must be appended first.
Example
Appending component models of a (simplified) HVAC system
The supplied room of an HVAC system can be modelled by its power and transport balance, as well as the enthalpy equation for the humid air.
powerBalance = ["0 = -m*dh1 + p1 + p2"]; transportBalance = ["0 = -m*dh2 + p3"]; enthalpy = ["h1 = c_d * T1 + c_v * T1 * h2 + r0 * h2"]; room = sym2dmss([powerBalance; transportBalance; enthalpy], 0, ["dh", "h", "p", "T"]);
where h1 is the room air enthalpy, h2 is the absolute room air humidity, dh1 and dh2 are their derivatives, T1 is the room temperature, p1 is the heat transported by the air flow of the air conditioning system (either heating or cooling the room air), p2 is the heat loss to the environment and p3 is the water vapor mass flow transported by the air flow of the air conditioning system (either humidifying or dehumidifying the room air).
The energy and humidity transfer by the air conditioning system can be modelled by the following equations
airConditioning = ["y1 = c_d*u1*u2 + c_v*u1*u2*u3 + r0*u1*u3 - u1*u4";... "y2 = u1*u3 - u1*u5"]; airConditioning = sym2dmss(airConditioning, 0, ["dx", "x", "u", "y"]);
Reduced by 1 column(s) and 0 equation(s) with trivial Reduction due to duplications.
where y1 corresponds to the power transported by the air flow of the air conditioning system, y2 to the water vapor mass flow transported by the air flow of the air conditioning system, u1 to the supplied mass flow of air, u2 to the supply temperature, u3 to the supply humidity, u4 to the rooms enthalpy and u5 to the rooms absolute humidity.
Additionally the heating loss to the environment can be calculated by
loss = ["y1 = k*A*(u1-u2)"]; loss = sym2dmss(loss, 0, ["dx", "x", "u", "y"]);
where y1 is the heat loss, u1 is the ambient temperature and u2 is the rooms temperature.
The component models can be appended to obtain an overall model of the system
sys = append(room, airConditioning, loss); disp(sys.symbolicEquations)
Unable to perform assignment because value of type 'sym' is not convertible to 'double'. Error in dmss/append/insertDiagonally (line 146) Mout.c(idxRows, idxCols) = M2.c; Error in dmss/append (line 92) sysOut.H.phi.equality = insertDiagonally(sysOut.H.phi.equality, sys2.H.phi.equality, nEqi+1:nEqi+sys2.nEq, Ri+1:Ri+R2); Error in appendDoc (line 56) sys = append(room, airConditioning, loss); Caused by: Error using mupadengine/feval2char Unable to convert expression containing symbolic variables into double array. Apply 'subs' function first to substitute values for variables
Due to the appending the number of variables as well as their index is increasing accordingly.
The input and output signals can be connected by using connection matrices, where the first column corresponds to the input index and the second column to the state/algebraic signal index.
stateInputConnection = [7 1; 8 2]; algebraicInputConnection = [9 1; 1 2; 3 3; 2 4]; similarInputs = []; sys = sys.connect(stateInputConnection, algebraicInputConnection, [], similarInputs); disp(sys.symbolicEquations)
References
See also
dmss, connect, hyCPN1, sym2dmss
Author(s): Torben Warnecke