为二维系统建模LQR不会打印特征值和dcgain

时间:2018-10-27 18:36:12

标签: matlab

我是Matlab和LQR控制器的新手。我尝试使用以下代码模拟使用状态空间模型建模的二维系统,但该系统未显示本征值和dcgain。我不确定我是否正确实现了代码。任何帮助,将不胜感激。

mc=10;
mr=10;
ml=10;
Jc=1/(12*(mc+mr+ml));
g = 9.8;
Fe=0.1;
d=0.5;
mu=0.02;

A_lat=[0 0 1 0;0 0 0 1;0 -Fe/(mc+mr+ml) -mu/(mc+mr+ml) 0;0 0 0 0];
B_lat=[0;0;0;1/(Jc+mr*d^2+ml*d^2)];
C_lat=[1 0 0 0];
D_lat=0;

A_lon=[0 1;0 0];
B_lon=[0;1/(mc+mr+ml)];
C_lon=[1 0];
D_lon=0;  

sys_lat = ss(A_lat,B_lat,C_lat,D_lat);
sys_lon=ss(A_lon,B_lon,C_lon,D_lon);

Co_lat = ctrb(sys_lat);
Co_lon = ctrb(sys_lon);

constQ=0.1;
constR=1;
Q_lat = Co_lat'*Co_lat;%constQ*eye(4);
R_lat = constR;
Q_lon = Co_lon'*Co_lon;%constQ*eye(2);
R_lon = constR;

K_lat = lqr(sys_lat,Q_lat,R_lat);
K_lon = lqr(sys_lon,Q_lon,R_lon);

sys_K_lat = ss(A_lat-B_lat*K_lat,B_lat,C_lat,D_lat);
sys_K_lon = ss(A_lon-B_lon*K_lon,B_lon,C_lon,D_lon);
sys_K=append(sys_K_lat,10,sys_K_lon);

disp("*******");
eig(A_lat-B_lat*K_lat);
eig(A_lon-B_lon*K_lon);
DCGAIN = dcgain(sys_K);

bode(sys_K);
input = @(t,x) -K_lat*x;

1 个答案:

答案 0 :(得分:0)

分号将抑制输出显示。只需删除分号即可解决特征值和dcgain的代码

disp('*******');
eig(A_lat-B_lat*K_lat)
eig(A_lon-B_lon*K_lon)
DCGAIN = dcgain(sys_K)

输出:

*******

ans =

  -0.1411 + 0.1411i
  -0.1411 - 0.1411i
  -0.0409 + 0.0409i
  -0.0409 - 0.0409i


ans =

  -0.0236 + 0.0236i
  -0.0236 - 0.0236i


DCGAIN =

   -5.0028         0         0
         0   10.0000         0
         0         0   30.0000