### 1.19 Solve the discrete-time algebraic Riccati equation

Problem: Given a continuous-time system represented by a transfer function $\frac {1}{s(s+0.5)}$ convert this representation to state space and sample the system at sampling period of $$1$$ second, and then solve the discrete-time Riccati equation.

The Riccati equation is given by $A^{\prime }X+XA-XBR^{-1}B^{\prime }X+C^{\prime }C=0$

Let $$R=[3]$$.

Mathematica

 Clear["Global*"]; sys=TransferFunctionModel[1/(s(s+.5)),s]; dsys=ToDiscreteTimeModel[sys, 1,z,Method->"ZeroOrderHold"]  ss = StateSpaceModel[dsys]  a = ss[[1,1]]; b = ss[[1,2]]; c = ss[[1,3]]; d = ss[[1,4]]; r = {{3}}; DiscreteRiccatiSolve[{a,b}, {Transpose[c].c,r}]; MatrixForm[%]  $\left ( {\begin {array}{cc} 0.671414 & -0.977632 \\ -0.977632 & 2.88699 \\ \end {array}} \right )$

Matlab

 clear all; close all; s = tf('s'); sys = 1/(s*(s+0.5)); dsys = c2d(sys,1)  dsys = 0.4261 z + 0.3608 ---------------------- z^2 - 1.607 z + 0.6065 Sample time: 1 seconds Discrete-time transfer function.  [A,B,C,D]=dssdata(dsys)  A = 1.6065 -0.6065 1.0000 0 B = 1 0 C = 0.4261 0.3608 D = 0 2.8870 -0.9776 -0.9776 0.6714  dare(A,B,C'*C,3)  ans = 2.8870 -0.9776 -0.9776 0.6714 

Maple

 restart; alias(DS=DynamicSystems): sys := DS:-TransferFunction(1/(s*(s+1/2))); sys := DS:-ToDiscrete(sys, 1, 'method'='zoh'); sys := DS:-StateSpace(sys); Q:=sys:-c^%T.sys:-c; R:=Matrix([[3]]); LinearAlgebra:-DARE(sys:-a,sys:-b,Q,R) ` $\left [\begin {array}{cc} 0.6714144604 & - 0.9776322436 \\ - 0.9776322436 & 2.8869912178 \end {array}\right ]$