.Modelica_LinearSystems2.Utilities.Import.linearize

Information

This function initializes a Modelica model and then simulates the model with its default experiment options until time instant "t_linearize". If t_linearize=0, no simulation takes place (only initialization). At the simulation stop time, the model is linearized in such a form that

Formally, the non-linear hybrid differential-algebraic equation system is therefore treated as the following ordinary equation system at time instant t_linearize:

    der(x) = f(x,u)
         y = g(x,u) 

Taylor series expansion (linearization) of this model around the simulation stop time t_linearize:

   u0 = u(t_linearize)
   y0 = y(t_linearize)
   x0 = x(t_linearize) 

and neglecting higher order terms results in the following system:

   der(x0+dx) = f(x0,u0) + der(f,x)*dx + der(f,u)*du
      y0 + dy = g(x0,u0) + der(g,x)*dx + der(g,u)*du

where der(f,x) is the partial derivative of f with respect to x, and the partial derivatives are computed at the linearization point t_linearize. Re-ordering of terms gives (note der(x0) = 0):

   der(dx) = der(f,x)*dx + der(f,u)*du + f(x0,u0)
        dy = der(g,x)*dx + der(g,u)*du + (g(x0,u0) - y0)

or

   der(dx) = A*dx + B*du + f0
        dy = C*dx + D*du

This function returns the matrices A, B, C, D and assumes that the linearization point is a steady-state point of the simulation (i.e., f(x0,u0) = 0). Additionally, the full Modelica names of all inputs, outputs and states shall be returned if possible (default is to return empty name strings).

Interface

function linearize
  import Simulator = DymolaCommands.SimulatorAPI;
  input String modelName "Name of the Modelica model" annotation(
    Dialog(__Dymola_translatedModel));
  input Modelica.Units.SI.Time t_linearize = 0 "Simulate until T_linearize and then linearize" annotation(
    Dialog);
  output Real A[nx, nx] = ABCD[1:nx, 1:nx] "A-matrix";
  output Real B[nx, nu] = ABCD[1:nx, nx + 1:nx + nu] "B-matrix";
  output Real C[ny, nx] = ABCD[nx + 1:nx + ny, 1:nx] "C-matrix";
  output Real D[ny, nu] = ABCD[nx + 1:nx + ny, nx + 1:nx + nu] "D-matrix";
  output String inputNames[nu] = xuyName[nx + 1:nx + nu] "Modelica names of inputs";
  output String outputNames[ny] = xuyName[nx + nu + 1:nx + nu + ny] "Modelica names of outputs";
  output String stateNames[nx] = xuyName[1:nx] "Modelica names of states";
end linearize;

Generated at 2024-04-28T18:16:21Z by OpenModelicaOpenModelica 1.22.3 using GenerateDoc.mos