97 views (last 30 days)
mohamed elkattan on 16 Apr 2018
Answered: Vehzan Rustomji on 7 Oct 2019
my aim is : linearize my dynamic model which follows a trajectory so i need to pass a new operating point every loop in simulink to linearize about.
the problem is in simulink i can't put a linearize function inside a matlab fuction block or linmod or even syms to make jacobian.
what i actually want is that using a varying statespace block output that will be my new op input for a matlap function block that does the linearization and outputs my new A,B,C,D every loop
is that approach even possible and if not how can i do this aim noting that after i linearize i use LQ control gain to control my system.
thank you

Vehzan Rustomji on 7 Oct 2019
It would be better to model the nonlinear system in Simulink using the differential equations that led to the state space representation in the first place. The dynamic model that you mention in your question can be modelled in Simulink using integrator blocks (refer this example: https://blogs.mathworks.com/simulink/2008/05/23/how-to-draw-odes-in-simulink/)
You may use the linearized version of the dynamic system to design an approximate controller. However the performance of the controller, that is designed for the linearized plant, is guaranteed only for that particular opearting point. It may happen that your system has multiple stable stationary points.
If you want to design an effective non-linear controller, one of the options is to use Feedback Linearization, as mentioned by Mostafa Salam in his answer. In this method, you essentially create a transformation from a new control input 'v' to the original control input 'u', such that the effective plant from 'v' to 'y' is linear, whose dynamics resemble an integrator. You can then design a controller for the new system where 'v' is now the control input and the output remains 'y'. Even when you implement this transformation, the non-linear original plant should still be described in Simulink using the differential equation notation discussed above. According to me, there is no way yet to define a state space block as a function of variables that will update with every loop.
The input transformation is also a function of the state variable 'x', and can be visualised by the following diagram: Hope this helps!

Mostafa Salam on 2 Jul 2018
Dear, The appropriate solution for your issue is the feedback linearization (FBL). FBL can linearize your nonlinear plant every loop at any operating point. it -also- keep the non-linearity of your model. it don't like a traditional (Jacobian) linearization which linearize the model approximately at specific equilibrium point.