I have the following differential equation.

$$\ddot{x} = \frac{q}{m}\cdot I^2 - k_s (x+l)$$

I want to linearize it around an (unknown) point $x_0$. I know I can calculate $I_0$ by inputting $x_0$ (and $\ddot{x}=0$) into my differential equation.

$$ 0=\frac{q}{m}\cdot I_0^2 - k_s(x_0+l) \Rightarrow I_0=\sqrt{\frac{k_s\cdot m}{q}(x_0+l)} $$

I then take the partial derivative.

$$\Delta \ddot{x} = \frac{2*q}{m} I_0 \Delta I -k_s \Delta x = 2\sqrt{\frac{k_sq}{m}(x_0+l)}\Delta I -k_s \Delta x $$ $$ \Rightarrow \Delta \ddot{x} +k_s \Delta x = 2\sqrt{\frac{k_sq}{m}(x_0+l)}\Delta I$$

I now have a differential equation describing my equation of motion in terms of differences around my working point. This working point is not set though, and changes depending on the x value my system currently has.

My initial approach to this problem was to use a sensor that reads my x value and then simply plug it into my control loop.

enter image description here

(For simplicity I've set $x=p_{is}$.)

However, this does not feel like it's the correct way to do things.

This is for $x_0=0.001\text{m}$.

enter image description here

How would I actually go about implementing this linearized transfer function into my loop? Are there even ways to let Simulink linearize my system directly, without me having to manually linearize around a working point?

  • $\begingroup$ Isn't your equation already linear to start with? I assume q, m and I are constant? In which case, no linearisation is needed. But yes, there are some linearisation tools within Simulink that would do the job for you, see Simulink Control Design - it requires the Control Systems Toolbox. $\endgroup$
    – am304
    Commented Mar 12, 2018 at 11:40
  • $\begingroup$ try playing with your PID coefficients. They highly influence the result. $\endgroup$
    – Arash
    Commented Mar 13, 2018 at 4:16
  • $\begingroup$ Why not use $I^2$ as your input signal and $x^*=x+l$ as your position ($\ddot{x}^*=\ddot{x}$)? $\endgroup$
    – fibonatic
    Commented Mar 16, 2018 at 10:10

1 Answer 1


By including $x_0$ as feedback (making $x_0 = x(t)$) you are not linearizing this system. Instead you've created a Linear Parameter-Varying (LPV) system (more specifically a quasi-LPV system since your parameter varies according to your state). Such systems do not obey the same stability properties as Linear Time-Invariant systems so if you're looking to apply a linear control strategy you may find your system is unexpectedly unstable. If you're dead-set on using this type of implementation, see Herbert Werner's Advanced Topics in Control.

When you linearize your system you need to pick a single operating point ($x_0$ has to be constant) and when you do so your controller will only be effective in a small region about that operating point. You can optionally pick multiple operating points and design a controller for each point, having your system switch between operating points as it changes state. However, you may still encounter some instability at the switching points, especially if you operate near a switching point.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.