question:
状态反馈控制器的设计
一、实验目的
1.加强对现代控制理论相关知识的理解;
2.掌握Matlab进行控制系统模型分析与控制器设计。
二、实验环境
1.Matlab仿真软件
三、实验内容
考虑某一阶倒立摆系统,其状态空间模型如下:
A=[0 1 0 0;0 0 -1 0;0 0 0 10;0 0 10/3 0];
B=[0;0.1;0;-1/30];
C=eye(4);
D=zeros(0);
1) 判断系统的能控性、能观性、稳定性,画出系统初始状态为x0=[1;-0.3;0.2;-0.5]的开环状态响应曲线。
2)求将极点配置为[-5+j;-5-j;-8+j;-8-j]的状态反馈控制器K,并画出初始状态为x0=[1;-0.3;0.2;-0.5]的闭环控制系统状态响应曲线。
%首先定义出系统的有关信息矩阵
A=[0 1 0 0;0 0 -1 0;0 0 0 10;0 0 10/3 0];
B=[0;0.1;0;-1/30];
C=eye(4);
D=zeros(0);
%第一个,对系统稳定性进行判定
e=eig(A); %eig(A)旨在返回一个列向量,其中包含方阵 A 的特征值。
i=all(real(e) < 0); %根据书上所言: “线性定常系统的平衡状态Xe=0渐近稳定的充要条件是矩阵A的所有特征值均具有负实部。%
if i==1
disp("系统稳定"); %disp(X) 显示变量 X 的值,而不打印变量名称。
else
disp("系统不稳定");
end
%第二个,判断系统的能控性。
M=rank(ctrb(A,B)); %M表示能控判别矩阵
l= M==4; %判断M是否满秩,若满秩则稳定,借助变量l的真值0、1来体现。
if l==1
disp('系统能控');
else
disp('系统不能控')
end
%第三个,判断系统的能观性
N=rank(obsv(A,C));
observation = N==4;
if observation==1
disp('系统能观');
else
disp('系统不能观');
end
下面为绘制系统开环响应的代码:
%系统初始状态
x0 = [1; -0.3; 0.2; -0.5];
%由上面的X0定义,对应有状态X1,X2,X3,X4的初始状态值为1,-0.3,0.2,-0.5。
%模拟出系统的开环响应如下。
t=0:0.01:10;
sys=ss(A,B,C,D);
[y,~,x]=initial(sys,x0,t);
%绘制过程如下。
figure;
subplot(4,1,1);
plot(t,x(:,1),'b');
grid on;
subplot(4, 1, 2);
plot(t, x(:, 2), 'r');
grid on;
subplot(4,1, 3);
plot(t, x(:, 3), 'g');
grid on;
subplot(4, 1, 4);
plot(t, x(:, 4), 'k');
grid on; %%grid on的作用是添加网格线。
xlabel('Time'); %%xlabel的作用是:xlabel(txt) 对当前坐标区或独立可视化的 x 轴加标签。
第二题待更新