滑模系统
x
˙
1
=
x
2
,
x
˙
2
=
u
,
u
=
{
−
2
x
1
+
2
x
2
,
if
x
1
⋅
s
>
0
,
−
x
1
−
2.5
x
2
,
if
x
1
⋅
s
≤
0
,
s
=
x
1
+
x
2
.
\begin{align*} \dot{x}_1 &= x_2, \\ \dot{x}_2 &= u, \\ u &= \begin{cases} -2x_1 + 2x_2, & \text{if } x_1 \cdot s > 0, \\ -x_1 - 2.5x_2, & \text{if } x_1 \cdot s \leq 0, \end{cases} \\ s &= x_1 + x_2. \end{align*}
x˙1x˙2us=x2,=u,={−2x1+2x2,−x1−2.5x2,if x1⋅s>0,if x1⋅s≤0,=x1+x2.
代码是Gpt写的
仿真代码
系统方程
function x_dot = sliding_mode_system1(t, x)
s = x(1) + x(2);
if x(1) * s > 0
u = -2 * x(1) + 2 * x(2);
else
u = -x(1) - 2.5 * x(2);
end
x_dot = [x(2); u];
end
相图代码
% 不稳定系统的矩阵
systemMat = [0, 1; -1, -2.5];
% 计算系统矩阵的特征值和特征向量
[eigenVectors, LambdaMat] = eig(systemMat);
eigenValues = diag(LambdaMat);
% 时间跨度
tspan = [0 20];
% 定义网格
[x1, x2] = meshgrid(-10:0.5:10, -10:0.5:10);
% 计算每个网格点的速度
u = zeros(size(x1));
v = zeros(size(x2));
for i = 1:numel(x1)
Y = sliding_mode_system1([], [x1(i); x2(i)]);
u(i) = Y(1);
v(i) = Y(2);
end
% 创建画布
figure;
% 绘制归一化的向量场
quiver(x1, x2, u./sqrt(u.^2+v.^2), v./sqrt(u.^2+v.^2), 'AutoScaleFactor', 0.5);
% 绘制x1和x2轴
hold on;
line([-10, 10], [0, 0], 'Color', 'k', 'LineWidth', 1.5); % x1轴
line([0, 0], [-10, 10], 'Color', 'k', 'LineWidth', 1.5); % x2轴
% 绘制滑模面:s = x1 + x2 = 0 并标注表达式
x = -10:0.1:10;
y = -x;
sliding_surface = plot(x, y, 'r', 'LineWidth', 2.5);
text(-9, 9, 's = x_1 + x_2 = 0', 'Color', 'r', 'FontSize', 12); % 调整标记位置和字体大小
% 定义几个不同的初始条件
initial_conditions = [-5 -5; 0 -1; 7 7; -7 -7; 7 -2];
% 为每个初始条件画出状态轨迹
for i = 1:size(initial_conditions, 1)
[t, traj] = ode45(@sliding_mode_system1, tspan, initial_conditions(i, :));
plot(traj(:,1), traj(:,2));
% 使用实心圆点标记初始点
plot(initial_conditions(i, 1), initial_conditions(i, 2), 'o', 'MarkerEdgeColor','green', 'MarkerFaceColor', 'green', 'MarkerSize', 4);
end
% 绘制特征向量所在的直线(两端延长)并标注特征值
for i = 1:2
ev = eigenVectors(:, i); % 第i个特征向量
% 特征向量延长线的起点和终点
points = [-10*ev'; 10*ev'];
% 绘制特征向量延长线
line(points(:,1), points(:,2), 'Color', 'b', 'LineWidth', 2, 'LineStyle', '--');
% 特征值标注
lambda_str = ['\lambda = ', num2str(eigenValues(i), '%.2f')];
text(points(2,1), points(2,2), lambda_str, 'Color', 'b', 'FontSize', 14);
end
% 格式化图形
xlabel('x_1');
ylabel('x_2');
title('滑模系统的相图');
axis equal;
grid on;
hold off;