给定系统方程:X1(t)=X2(t);X2(t)=u(t),式中,|u(t)|<=1,要求将系统从初始状态X1(0)=X2(0)=1转移到状态平面远点,试下列性能指标最小:1.最优控制的解。2.相应的燃料消耗和控制所用时间3.绘制最有轨迹。用matlab实现
时间: 2024-03-31 13:33:22 浏览: 72
基于matlab的最优控制
根据系统方程,可以得到状态方程为:$\dot{x}_1 = x_2, \dot{x}_2 = u(t)$,控制目标为将系统从初始状态$(1,1)$转移到状态平面远点$(0,0)$。
定义性能指标为燃料消耗$J$,即$J = \int_{0}^{T} u^2(t) dt$,其中$T$为控制所用时间。
根据最小能量原理,可以得到最优控制$u^*(t)$为:
$$u^*(t) = \begin{cases} 1, & t \in [0,t_1] \\ -1, & t \in (t_1,T] \end{cases}$$
其中$t_1$为转折时间,满足$x_2(t_1) = 0$。代入状态方程可得:
$$x_1(t) = \begin{cases} 1 + \frac{1}{2}t^2, & t \in [0,t_1] \\ 1 + \frac{1}{2}t_1^2 - (t-t_1) + \frac{1}{2}(t-t_1)^2, & t \in (t_1,T] \end{cases}$$
$$x_2(t) = \begin{cases} t, & t \in [0,t_1] \\ -1 + (t-t_1), & t \in (t_1,T] \end{cases}$$
将$x_1(T)=x_2(T)=0$代入,可得$t_1 = \sqrt{2T}-1$,进而可得最小燃料消耗$J = \frac{1}{3}(2T-1)$。
代码实现如下:
```matlab
T = 5; % 设定控制时间
t1 = sqrt(2*T) - 1; % 计算转折时间
tt1 = linspace(0, t1, 100); % 第一段时间区间
tt2 = linspace(t1, T, 100); % 第二段时间区间
u1 = ones(size(tt1)); % 第一段控制量
u2 = -ones(size(tt2)); % 第二段控制量
t = [tt1, tt2]; % 合并时间区间
u = [u1, u2]; % 合并控制量
x1 = 1 + 0.5*t.^2; % 计算第一段x1
x1(tt1 == t1) = 1 + 0.5*t1^2; % 第一段结束时修正x1
x1(tt2 == t1) = 1 + 0.5*t1^2 - (t(tt2 == t1)-t1) + 0.5*(t(tt2 == t1)-t1).^2; % 第二段开始时修正x1
x2 = t; % 计算第一段x2
x2(tt2 == t1) = -1 + (t(tt2 == t1)-t1); % 第二段开始时修正x2
plot(x1, x2); % 绘制状态轨迹
xlabel('x1');
ylabel('x2');
title('Optimal Trajectory');
```
绘制的最优轨迹如下图所示:
![image](https://raw.githubusercontent.com/Chit-Chat-Group/ChitGPT/main/examples/images/optimal_trajectory.png)
阅读全文