.Modelica_LinearSystems2.WorkInProgress.Tests.Design.testPoleAssignment

Information

Computes the gain vector k for the state space system

ss = StateSpace(A=[-1,1;0,-2],B=[0, 1],C=[1,0; 0, 1],D=[0; 0])
such that for the state feedback
u = -k*y = -k*x
the closed-loop poles are placed at
p = {-3,-4}.

Interface

function testPoleAssignment
  extends Modelica.Icons.Function;
  import Complex;
  import Modelica_LinearSystems2.ComplexMathAdds;
  import Re = Modelica.ComplexMath.real;
  import Im = Modelica.ComplexMath.imag;
  import Modelica_LinearSystems2.Math.Matrices;
  import Modelica_LinearSystems2.WorkInProgress.Tests.Design;
  import Modelica.Utilities.Streams.print;
  import Modelica_LinearSystems2.WorkInProgress.Tests.Internal.DesignData;
  import Modelica_LinearSystems2.StateSpace;
  input DesignData data = Design.data_Chow_Kokotovic() annotation(
    Dialog);
  input Types.AssignPolesMethod method = Tests.Types.AssignPolesMethod.KNV "method for pole assignment";
  input Boolean isSI = true;
  output Real K[size(data.B, 2), size(data.A, 1)] "Feedback gain matrix";
  output Complex calcPoles[size(data.A, 1)];
  output Real kappa2 "condition number kappa_2(X) = ||X||_2 * ||inv(X)||_2";
  output Real kappaF "condition number kappa_F(X) = ||X||_F * ||inv(X)||_F";
  output Real zeta "condition number by Byers, zeta(X) = (||X||_F)^2 + (||inv(X)||_F)^2";
  output Real cInf "condition number vu1=||c||_inf = max(c_j)";
  output Real nu2 "Euclidean norm of the feedback matrix";
  output Real nuF "Frobenius norm of the feedback matrix";
  output Real dlambda "Distance between the assigned and the calculated poles";
  output Real gap = 0.0;
  output Real Jalpha[11] "Combined condition number, JKX=alpha/2*(kappa2X_B) + (1-alpha)/2*normFroK^2";
  output Complex X[:, :] "right eigenvectors of the closed loop system";
end testPoleAssignment;

Generated at 2024-11-21T19:25:40Z by OpenModelicaOpenModelica 1.24.2 using GenerateDoc.mos