I'm learning nonlinear control and I have already learn how to do phase plots. It was not a big deal. Just using ode45 in Octave/Matlab. But when I going to learn something, I only focus on practical applications, in other words - methods which works in real life. So theoretical control theory is not my thing. So giving me a theoretical explanation how lyapunov theory works, is not a good way for me to understand. I have choosing nonlinear control due to that the reality is nonlinear too. I also want to work with robotics.

Anyway! I asking how I should interpret lyapunov stability. I know that lyapunov stability is for nonlinear control. When I reading about lyapunov stability, I got a wall of text of theory. So I going to give a example here, solve it and ask if I have understood it right. I also going to ask how I can build a controller of lyapunov function. Lyapunov stability is very popular when it comes to robotic arms etc.

Here is my problem. I have a cart with a damper and a spring attached to it. enter image description here

The equation for this system is:

$$m\ddot{x} + b\dot{x} |\dot{x}| + k_0 x + k_1 x^3 = 0$$

The damping term is $b\dot{x} |\dot{x}|$ and the stiffness term is $k_0 x + k_1 x^3$.

I do first a simulation of the system. A assume that $b = 50, k_1 = 30, k_0 = 20, m = 100$

Start with the initial state vector $x_1 = 1, x_2 = 0$ which is $x = 1, \dot{x} = 0$.

>> fun = @(t, x) [x(2); (-30/100*x(1)^3 -20/100*x(1)) - 50/100*x(2)*abs(x(2))];
>> [t, y] = ode45(fun, 0:0.2:100, [1;0]);
>> plot(y(:,1), y(:, 2))
>> grid on
>> ylabel('x_2', 'fontsize', 15)
>> xlabel('x_1', 'fontsize', 15)

enter image description here enter image description here

I know that my system is stable. If the system was linear, I didn't need to use lyapunov function. I would check the eigenvalues for the system. Here is how it would look then.

I got this due to the stiffness in the system

enter image description here

If we didn't have any damping in the system. I would have:

enter image description here

I will now express the system in sum of potential energy and kinetic energy:


$$m\ddot{x} + b\dot{x} |\dot{x}| + k_0 x + k_1 x^3 = 0$$

Becomes this:

$$V(x, \dot{x}) = \frac{1}{2}m\dot{x}^2 + \int(k_0 x + k_1 x^3)dx = \frac{1}{2}m\dot{x}^2 + \frac{1}{2}k_0x^2 + \frac{1}{4}k_1x^4 $$

And there is my lyapunov function. To check if the system is stable, I need to find the derivative of $V(x, \dot{x})$.

$$\dot{V}(x, \dot{x}) = m\dot{x}\ddot{x} + k_0 x\dot{x} + k_1 x^3\dot{x}$$

When $x$ and $\dot{x}$ goes to zero, then $\dot{V}(x, \dot{x})$ goes also to zero. That means that the system is stable.

Here we can view the lyapunov function who is almost shaped as a quadratic function. enter image description here

>> [dx, x] = meshgrid(-1:0.1:1, -1:0.1:1);
>> V = 1/2*100.*dx.^2 + 1/2*20.*x.^2 + 1/4*30.*x.^4;
>> mesh(x, dx, V)
>> xlabel('x_1', 'fontsize', 15); ylabel('x_2', 'fontsize',15)
>> zlabel('V(x_1, x_2)', 'fontsize', 15)

And how the lyapunov function did go to zero over time. Almost zero.

enter image description here

>> fun = @(t, x) [x(2); (-30/100*x(1)^3 -20/100*x(1)) - 50/100*x(2)*abs(x(2))];
>> [t, y] = ode45(fun, 0:0.2:100, [1;0]);
>> V = 1/2*100.*y(:, 2).^2 + 1/2*20.*y(:, 1).^2 + 1/4*30.*y(:, 1).^4;
>> plot(t, V)
>> grid on
>> xlabel('time', 'fontsize', 15); ylabel('V(x_1, x_2)', 'fontsize', 15)


  1. In literature, there is a lot of talk about Lyapunov stable, global stable, asymptotical stable and exponentially stable. What's the difference? I'm a very visual p̶e̶r̶s̶o̶n̶ man and graphs and plots will speak to me very well.

  2. How can I use lyapunov function to build a control law of it? I assume that nonlinear control includes a lyapunov control law, or is it more like MPC. A nonlinear solver who finds the best input signals for the system? That would be great too.

  • 1
    $\begingroup$ Take a look applied system control by Slotine. $\endgroup$
    – CroCo
    Commented Apr 24, 2018 at 7:09

1 Answer 1



$$ V(\dot x, x) = \frac{1}{2}\dot x^2+\frac{1}{2}k_0 x^2+\frac{1}{4}k_1x^4 $$

and now assuming also that the dynamic system is actuated

$$ m\ddot x + b \dot x\vert\dot x\vert + k_0 x + k_1 x^3 = m u $$

A suitable control action can be proposed as follows

$$ \dot V(\dot x, x) = m \dot x\ddot x + k_0 x\dot x + k_1x^3\dot x $$

now taken

$$ \ddot x = u -\frac{1}{m} ( b \dot x\vert\dot x\vert + k_0 x + k_1 x^3) $$

and substituting into $\dot V(\dot x, x)$ we have

$$ \dot V(\dot x, x) = m \dot x\left( u -\frac{1}{m} ( b \dot x\vert\dot x\vert + k_0 x + k_1 x^3)\right) + k_0 x\dot x + k_1x^3\dot x $$


$$ \dot V(\dot x, x) = m \dot x u -( b \dot x\vert\dot x\vert + k_0 x + k_1 x^3)\dot x+k_0 x\dot x + k_1x^3\dot x = m\dot x u - b\dot x^2\vert\dot x\vert $$

and now choosing $u = -K \dot x$ we have

$$ \dot V(\dot x, x) = -K m \dot x^2-b\dot x^2\vert\dot x\vert \le 0 $$

So the control action $u = -K \dot x$ helps the system stabilization

  • $\begingroup$ Well done! Does it has to be $$ m\ddot x + b \dot x\vert\dot x\vert + k_0 x + k_1 x^3 = m u $$ Can't it not be $$ m\ddot x + b \dot x\vert\dot x\vert + k_0 x + k_1 x^3 = u $$ Instead? Does the control law has to be $$u = -K \dot x$$ Can't it be $$u = -Kx$$ ? After I have got my luyapunov control function $$ \dot V(\dot x, x) = -K m \dot x^2-b\dot x^2\vert\dot x\vert \le 0 $$ I need to find the $K$ who minimizes $\dot V(\dot x, x)$. How can I do that? Assuming $\dot x = 0$ will minimize $\dot V(\dot x, x)$, but that is not right, because I need velocity to move the system. $\endgroup$
    – euraad
    Commented Apr 22, 2018 at 8:36
  • $\begingroup$ There are many ways to introduce additional stabilization using the Lyapunov techniques. In the present case any $K > 0$ would help. The size of $K$ should be analyzed according to an additional criteria as available control energy, transients, saturation etc. $\endgroup$
    – Cesareo
    Commented Apr 22, 2018 at 8:50
  • $\begingroup$ So if I implement this controller in a microcontroller. Should I then try to minimize $\dot V$ or something? $\endgroup$
    – euraad
    Commented Apr 22, 2018 at 9:35
  • $\begingroup$ If you have a suitable plant model then you could simulate it in typical maneuvers, to make an adequate choice. After that then you can implement it taking care with the sampling period. Note also that this is a derivative controller. Derivative actions introduce undesirable noise. $\endgroup$
    – Cesareo
    Commented Apr 22, 2018 at 9:53
  • $\begingroup$ Ok! Now I understand why you did choose $u = -K \dot x$ as the control law. You mean trail and error? I choose an arbitrary value for $K$, simulate the system and then compute how fast $\dot V$ goes to zero? If $\dot V$ goes to zero quickly, that means I have chosen a good gain value for $K$? $\endgroup$
    – euraad
    Commented Apr 22, 2018 at 10:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .