linearize
Linearize an explicit (mss) or hybrid implicit (dmss) multilinear model around an operating point.
Contents
Syntax
lsys = linearize(sys, op) % mss -> ss/sparss dss = linearize(sys, op) % dmss -> dss [dss, dssSparse] = linearize(sys, op) % dmss -> dense and sparse
Backward compatible signatures: linearize(msys, x, u) % mss (legacy) linearize(msys, xp, x, u, y, z) % dmss (legacy)
Description
linearize(sys, op) invokes the class-specific linearization implemented by both mss and dmss objects. It accepts a single operating point argument op as a struct for clarity and extensibility.
For mss objects:
- op.x (n×1) – state operating point (required)
- op.u (m×1) – input operating point (required if m>0)
For dmss objects:
- op.xp (n×1) – state-derivative operating point (optional)
- op.x (n×1) – state operating point (optional)
- op.u (m×1) – input operating point (optional)
- op.y (p×1) – algebraic variable operating point (optional)
- op.z (q×1) – boolean variable operating point (optional)
Any omitted fields default to []. The class methods perform basic dimension checks.
Convenience forms are supported for parity with MATLAB’s style:
- mss: numeric vector [x; u] or cell {x, u}
- dmss: numeric vector [xp; x; u; y; z] or cell {xp, x, u, y, z}
Input Arguments
sys: multilinear MTI model (mss or dmss object)
op : struct, numeric vector, or cell containing operating point values (see above)
Output Arguments
lsys: linear LTI model, ss or sparss (for mss inputs)
dss, dssSparse: linear descriptor model(s) as dss and sparss (for dmss inputs)
Example (mss):
Second-order explicit MTI model with 2 states and 1 input (expanded and factored form)
.
The factored explicit MTI model as CPN1 object thus has a structure matrix
S = [0.5 -0.5; 1 0; 0 1];
and the parameter matrix
phi = [2 0; 4 6];
Then we can create explicit MTI model as a CPN1 object and the mss-object
tens = CPN1(S,phi);
msys = mss(tens);
and assume the operating point for the states x and the input u
x_op = [-1;1];
u_op = 3;
Then we can linearize the explicit MTI model using an op struct
op = struct('x', x_op, 'u', u_op); lsys = linearize(msys, op)
Warning: No Outputs defined, assuming states as outputs.
lsys =
A =
x1 x2
x1 1 0
x2 -7 0
B =
u1
x1 0
x2 6
C =
x1 x2
y1 1 0
y2 0 1
D =
u1
y1 0
y2 0
Continuous-time state-space model.
Example (dmss):
For the following continuous-time implicit multilinear model with 2 states and 1 algebraic variable, a dmss object is created using the sym2dmss command:
eqs = {'0==xp1-x1*x2*y1+4';
'0==xp2-x2+2'
'0==x2-y1';};
dsys = sym2dmss(eqs, 0);
%
% The operating point point, where xp=0, is:
%
xpop = [0; 0];
xop = [1; 2];
yop = 2;
%
% which is stored as a |op| struct
%
op = struct('xp', xpop, 'x', xop,'y',yop);
%
% Then the |dmss| is linearized at the operating point as follows:
%
dss = linearize(dsys, op);
%
% The result |dss| is a linear descriptor state-space model, which is a
% |ss| object.
Reduced by 2 column(s) and 0 equation(s) with trivial Reduction due to duplications.
References
[1] C. Kaufmann, D. Crespí, G. Lichtenberg, G. Pangalos, and C. Cateriano Yáñez, "Efficient Linearization of Explicit Multilinear Systems using Normalized Decomposed Tensors," IFAC-PapersOnLine, vol. 56, no. 2, pp. 7312–7317, Jan. 2023, doi: https://doi.org/10.1016/j.ifacol.2023.10.344.
[2] C. Kaufmann, G. Pangalos, G. Lichtenberg, O. Gomis-Bellmunt, "Small-Signal Stability Analysis of Power Systems by Implicit Multilinear Models", submitted to IEEE Trans. Circuits Syst. I Regul. Pap., 2025.
You can find a full example here: open linearization example