线性二次型最优控制matlab仿真
时间: 2024-12-31 20:30:09 浏览: 31
### 线性二次型最优控制 MATLAB 仿真示例
#### 创建系统模型
为了进行线性二次型最优控制 (LQR) 的仿真,首先需要定义被控对象的状态空间模型。假设有一个二阶线性定常系统:
\[ \dot{x}(t)=Ax(t)+Bu(t),\quad y(t)=Cx(t)+Du(t)\]
其中 \(A\) 是状态矩阵, \(B\) 输入矩阵, \(C\) 输出矩阵, 而 \(D\) 直接传输矩阵。
对于简单的一级倒立摆控制系统来说,可以建立如下形式的状态方程[^3]:
```matlab
% 定义系统参数
m = 0.5; % 小车质量(kg)
M = 1.0; % 杆的质量(kg)
l = 0.5; % 杆长度(m)
g = 9.81;% 重力加速度(m/s^2)
% 构造状态空间表达式的系数矩阵 A 和 B
A = [0 1; g/l 0];
B = [0;-1/(m*l)];
% 假设 C=[1 0], D=0 表明只测量位置而不测角速度
C = [1 0];
D = 0;
```
#### 设计 LQR 控制器
接下来设定权重矩阵 Q 和 R 并调用 `lqr` 函数来获取反馈增益 K:
```matlab
Q = eye(2); % 对于状态向量 x 的惩罚项
R = 1; % 对于输入 u 的惩罚项
[K,S,e] = lqr(A,B,Q,R);
disp('LQR Feedback Gain Matrix:');
disp(K);
% 显示闭环极点分布情况
p=eig(A-B*K);
disp('Closed-loop poles:');
disp(p);
```
上述代码片段实现了基于给定的系统模型和成本函数中的权衡因子(Q 和 R),计算出了使总代价最小化的最佳反馈律\(u=-Kx\) 中的比例系数 K 向量[^1]。
#### 进行仿真验证
最后一步是在 Simulink 或者纯脚本环境中设置初始条件并运行模拟过程以观察响应特性:
```matlab
% 初始化变量
Tf = 10; % 总时间(s)
dt = 0.01; % 时间步长(s)
time = 0:dt:Tf;
% 初始状态
x0 = [-pi/4 ; 0];
% 开始积分求解微分方程组
[t,x]=ode45(@(t,x)(A-B*K)*x,time,x0);
figure();
plot(t,x(:,1));
title('Position Response');
xlabel('Time(sec)');
ylabel('Angle(rad)');
grid on;
```
这段代码完成了对所设计控制器性能的一个初步检验工作,通过绘制角度随时间变化曲线展示了一级倒立摆在施加了由 LQR 方法得到的最佳控制作用下的行为特征[^2]。
阅读全文