Main Content

lqr

Linear-Quadratic Regulator (LQR) design

Description

example

[K,S,P] = lqr(sys,Q,R,N) calculates the optimal gain matrix K, the solution S of the associated algebraic Riccati equation, and the closed-loop poles P for the continuous-time or discrete-time state-space model sys. Q and R are the weight matrices for states and inputs, respectively. The cross term matrix N is set to zero when omitted.

example

[K,S,P] = lqr(A,B,Q,R,N) calculates the optimal gain matrix K, the solution S of the associated algebraic Riccati equation and the closed-loop poles P using the continuous-time state-space matrices A and B. This syntax is only valid for continuous-time models. For discrete-time models, use dlqr.

Examples

collapse all

pendulumModelCart.mat contains the state-space model of an inverted pendulum on a cart where the outputs are the cart displacement x and the pendulum angle θ. The control input u is the horizontal force on the cart.

[x˙x¨θ˙θ¨]=[01000-0.13000010-0.5300][xx˙θθ˙]+[0205]uy=[10000010][xx˙θθ˙]+[00]u

First, load the state-space model sys to the workspace.

load('pendulumCartModel.mat','sys')

Since the outputs are x and θ, and there is only one input, use Bryson's rule to determine Q and R.

Q = [1,0,0,0;...
    0,0,0,0;...
    0,0,1,0;...
    0,0,0,0];
R = 1;

Find the gain matrix K using lqr. Since N is not specified, lqr sets N to 0.

[K,S,P] = lqr(sys,Q,R)
K = 1×4

   -1.0000   -1.7559   16.9145    3.2274

S = 4×4

    1.5346    1.2127   -3.2274   -0.6851
    1.2127    1.5321   -4.5626   -0.9640
   -3.2274   -4.5626   26.5487    5.2079
   -0.6851   -0.9640    5.2079    1.0311

P = 4×1 complex

  -0.8684 + 0.8523i
  -0.8684 - 0.8523i
  -5.4941 + 0.4564i
  -5.4941 - 0.4564i

Although Bryson's rule usually provides satisfactory results, it is often just the starting point of a trial-and-error iterative design procedure to tune your closed-loop system response based on the design requirements.

aircraftPitchModel.mat contains the state-space matrices of an aircraft where the input is the elevator deflection angle δ and the output is the aircraft pitch angle θ.

[α˙q˙θ˙]=[-0.31356.70-0.0139-0.4260056.70][αqθ]+[0.2320.02030][δ]y=[001][αqθ]+[0][δ]

For a step reference of 0.2 radians, consider the following design criteria:

  • Rise time less than 2 seconds

  • Settling time less than 10 seconds

  • Steady-state error less than 2%

Load the model data to the workspace.

load('aircraftPitchModel.mat')

Define the state-cost weighted matrix Q and the control weighted matrix R. Generally, you can use Bryson's Rule to define your initial weighted matrices Q and R. For this example, consider the output vector C along with a scaling factor of 2 for matrix Q and choose R as 1. R is a scalar since the system has only one input.

R = 1
R = 1
Q1 = 2*C'*C
Q1 = 3×3

     0     0     0
     0     0     0
     0     0     2

Compute the gain matrix using lqr.

[K1,S1,P1] = lqr(A,B,Q1,R);

Check the closed-loop step response with the generated gain matrix K1.

sys1 = ss(A-B*K1,B,C,D);
step(sys1)

Figure contains an axes object. The axes object contains an object of type line. This object represents sys1.

Since this response does not meet the design goals, increase the scaling factor to 25, compute the gain matrix K2, and check the closed-loop step response for gain matrix K2.

Q2 = 25*C'*C
Q2 = 3×3

     0     0     0
     0     0     0
     0     0    25

[K2,S2,P2] = lqr(A,B,Q2,R);
sys2 = ss(A-B*K2,B,C,D);
step(sys2)

Figure contains an axes object. The axes object contains an object of type line. This object represents sys2.

In the closed-loop step response plot, the rise time, settling time, and steady-state error meet the design goals.

Input Arguments

collapse all

Dynamic system model, specified as an ss model object.

State matrix, specified as an n-by-n matrix, where n is the number of states.

Input-to-state matrix, specified as an n-by-m input-to-state matrix, where m is the number of inputs.

State-cost weighted matrix, specified as an n-by-n matrix, where n is the number of states. You can use Bryson's rule to set the initial values of Q given by:

Qi,i=1maximum acceptable value of (errorstates)2, i{1,2,...,n}Q=[Q1,1000Q2,200000Qn,n]

Here, n is the number of states.

Input-cost weighted matrix, specified as a scalar or a matrix of the same size as D'D. Here, D is the feed-through state-space matrix. You can use Bryson's rule to set the initial values of R given by:

Rj,j=1maximum acceptable value of (errorinputs)2, j{1,2,...,m}R=[R1,1000R2,200000Rm,m]

Here, m is the number of inputs.

Optional cross term matrix, specified as a matrix. If N is not specified, then lqr sets N to 0 by default.

Output Arguments

collapse all

Optimal gain of the closed-loop system, returned as a row vector of size n, where n is the number of states.

Solution of the associated algebraic Riccati equation, returned as an n-by-n matrix, where n is the number of states. In other words, S is the same dimension as state-space matrix A. For more information, see icare and idare.

Poles of the closed-loop system, returned as a column vector of size n, where n is the number of states.

Limitations

The input data must satisfy the following conditions:

  • The pair A and B must be stabilizable.

  • [Q,N;N',R] must be nonnegative definite.

  • R>0 and QNR1NT0.

  • (QNR1NT,ABR1NT) has no unobservable mode on the imaginary axis (or unit circle in discrete time).

Tips

  • lqr supports descriptor models with nonsingular E. The output S of lqr is the solution of the algebraic Riccati equation for the equivalent explicit state-space model:

    dxdt=E1Ax+E1Bu

Algorithms

For continuous-time systems, lqr computes the state-feedback control u=Kx that minimizes the quadratic cost function

J(u)=0(xTQx+uTRu+2xTNu)dt

subject to the system dynamics x˙=Ax+Bu.

In addition to the state-feedback gain K, lqr returns the solution S of the associated algebraic Riccati equation

ATS+SA(SB+N)R1(BTS+NT)+Q=0

and the closed-loop poles P = eig(ABK). The gain matrix K is derived from S using

K=R1(BTS+NT).

For discrete-time systems, lqr computes the state-feedback control un=Kxn that minimizes

J=n=0{xTQx+uTRu+2xTNu}

subject to the system dynamics xn+1=Axn+Bun.

In all cases, when you omit the cross term matrix N, lqr sets N to 0.

Version History

Introduced before R2006a