非线性系统控制器设计详解及案例仿真(s-function函数)

前沿

定义一个系统 x ˙ = f ( x , u ) \dot{x} = f(x,u) x˙=f(x,u), 其中 x x x 为状态变量, u u u 为系统输入,其系统框图如下。
在这里插入图片描述
此时若假设 u u u x x x 的函数,即 u = ϕ ( x ) u = \phi (x) u=ϕ(x) ,则 x ˙ = f ( x , ϕ ( x ) ) \dot{x} = f(x,\phi(x)) x˙=f(x,ϕ(x))为新的研究对象, 系统框图为
在这里插入图片描述

一、案例1

1. 系统模型

{ x ˙ = f ( x , u ) = a x 2 + u u = ϕ ( x ) \begin{cases} \dot{x} = f(x,u) = ax^2+u \\ u= \phi(x) \end{cases} {x˙=f(x,u)=ax2+uu=ϕ(x)

可知, f ( 0 , 0 ) = 0 f(0,0) = 0 f(0,0)=0, 说明 平衡点为原点 ( 0 , 0 ) (0,0) (0,0)。若希望该点为系统渐进稳定的平衡点,则该问题就转化成了原点附近的平衡问题 (stability of origin ) \text{(stability of origin}) (stability of origin),由此易得,只要令 u = − a x 2 − x u = -ax^2-x u=ax2x,把其代回系统中,不难发现 x ˙ = − x \dot{x} = -x x˙=x是一个简单的微分方程,解得 x ( t ) = C e − t x(t) = Ce^{-t} x(t)=Cet,当 t → ∞ t \rightarrow \infty t 时, x → 0 x \rightarrow 0 x0

  • u u u 包含两部分,“ − a x 2 -ax^2 ax2” 消除了原系统中的非线性部分,而 “ − x -x x” 为系统提供稳定。

从该系统可以观察得出,把一个非线性系统,通过我们的输入将其线性话,这种方法叫反馈系统线性化,简单粗暴,只是单纯地消除原系统非线性部分,再添加一个稳定项,看似简单,但这种方法不一定是最佳的。

二、案例2

1. 系统模型

x ˙ = x 2 − x 3 + u \dot{x} = x^2-x^3+u x˙=x2x3+u

2. 稳定性分析

同理,使用上述反馈线性化的方法,可以令 u = − x 2 + x 3 − x u = -x^2+x^3-x u=x2+x3x,一样可得 x ˙ = − x \dot{x} = -x x˙=x使系统稳定。除了这种粗暴的方法,还有没有更好的呢?当然,对于系统稳定性问题,一定不要忘了李雅普诺夫(Lyapunov)稳定性方法。先来回顾一下李雅普诺夫稳定性:

  • 如果对于一个系统 x ˙ = f ( x ) \dot{x} = f(x) x˙=f(x) x ˙ = 0 \dot{x} = 0 x˙=0时, x = 0 x = 0 x=0,即 x = 0 x = 0 x=0 为该系统平衡点,如果我们能找到一个Lypunov函数 V V V, 使得
    { V ( 0 ) = 0 V ( x ) 正定 V ˙ ( x ) 负定 ⇒ 可推出  x = 0   是渐进稳定的平衡点 \begin{cases} \begin{aligned} V(0) = 0\\ V(x) 正定\\ \dot{V}(x) 负定 \end{aligned} \quad \begin{aligned} \Rightarrow \text{可推出 }x = 0\,\text{是渐进稳定的平衡点} \end{aligned} \end{cases} V(0)=0V(x)正定V˙(x)负定可推出 x=0是渐进稳定的平衡点

对于 x ˙ = x 2 − x 3 + u \dot{x} = x^2-x^3+u x˙=x2x3+u,我们可以取 V = 1 2 x 2 V = \frac{1}{2}x^2 V=21x2, 显然 V V V 正定且 V ( 0 ) = 0 V(0) = 0 V(0)=0。求得

V ˙ = x x ˙ = x ( x 2 − x 3 + u ) = x 3 − x 4 + x u \dot{V} = x\dot{x} = x(x^2-x^3+u) = x^3-x^4+xu V˙=xx˙=x(x2x3+u)=x3x4+xu,若要使系统稳定,则需满足负定条件,

即要令 V ˙ < 0 \dot{V} < 0 V˙<0, 显然,第二项 − x 4 -x^4 x4 本身是负定项,第一项 x 3 x^3 x3 不是负定项, 因此设计 u u u 时,

要考虑将第一项消除,固不难得出

  1. u = − x 2 − x u = -x^2-x u=x2x。 此时 V ˙ = − x 4 − x 2 \dot{V} = -x^4-x^2 V˙=x4x2 负定。
  2. u = − x 2 u = -x^2 u=x2。 此时, V ˙ = − x 4 \dot{V} = -x^4 V˙=x4 同样满足负定条件。

所以,综合以上两种方法,针对系统 x ˙ = x 2 − x 3 + u \dot{x} = x^2-x^3+u x˙=x2x3+u, 要使系统稳定 u u u 可以被设计为
{ u 1 = − x 2 + x 3 − x u 2 = − x 2 − x u 3 = − x 2 \begin{cases} u_1 = -x^2+x^3-x \\ u_2 = -x^2-x \\ u_3 = -x^2 \end{cases} u1=x2+x3xu2=x2xu3=x2

均可使系统稳定。

接下来,针对例二,我们通过对该系统进行仿真,研究所设计的 u u u的三种形式 u 1 , u 2 , u 3 u_1, u_2, u_3 u1,u2,u3对系统稳定性的影响。

系统模型如下:
x ˙ = x 2 − x 3 + u , { u 1 = − x 2 + x 3 − x u 2 = − x 2 − x u 3 = − x 2 \dot{x} = x^2-x^3+u ,\qquad \begin{cases} u_1 = -x^2+x^3-x \\ u_2 = -x^2-x \\ u_3 = -x^2 \end{cases} x˙=x2x3+u, u1=x2+x3xu2=x2xu3=x2

3. 仿真(包含代码)

1. 仿真效果

如图所示, x u 1 , x u 2 , x u 3 x_{u1}, x_{u2}, x_{u3} xu1,xu2,xu3 分别独立对应系统选择不同的输入 u 1 , u 2 , u 3 u_1, u_2, u_3 u1,u2,u3所呈现的效果。

在这里插入图片描述

局部放大后 ⇒ \Rightarrow

在这里插入图片描述

2. 仿真结果

显然

  1. u 1 u_1 u1(黄色) 虽能在 t → 6 s t \rightarrow 6s t6s 左右稳定到 0 0 0,但前期响应速度过慢,显然不如 u 2 u_2 u2
  2. u 2 u_2 u2(蓝色) 可以实现在最短的时间内(如图3s左右),使 x → 0 x \rightarrow 0 x0,响应速度最快。
  3. u 3 u_3 u3(红色) 响应速度略逊 u 2 u_2 u2,且使系统稳定所需时间最长,当 t → 10 s t \rightarrow 10s t10s时,与 0 0 0 仍有一定误差。

综上,三种输入 u u u 中都可以使系统稳定,但选择 u 2 u_2 u2(蓝色) 作为输入最佳。

3. 仿真剖析

现在来分析一下,为什么会出现不同的效果。

将所设计的 u 1 , u 2 , u 3 u_1, u_2, u_3 u1,u2,u3分被代入原方程 x ˙ = x 2 − x 3 + u \dot{x} = x^2-x^3+u x˙=x2x3+u,可得三个不同的方程

{ x ˙ = − x , ⇒ x u 1 = c 1 e − t x ˙ = − x 3 − x , ⇒ x u 2 = 1 e c 1 + 2 t − 1 x ˙ = − x 3 , ⇒ x u 3 = 1 c 1 + 2 t \begin{cases} \begin{align} \dot{x} =& -x, \qquad &\Rightarrow x_{u_1} =& c_1e^{-t}\\ \dot{x} = &-x^3-x, \qquad &\Rightarrow x_{u_2} =& \frac{1}{\sqrt{e^{c_1+2t}-1}} \\ \dot{x} =& -x^3, \qquad &\Rightarrow x_{u_3} =& \frac{1}{\sqrt{c_1+2t}} \end{align} \quad \end{cases} x˙=x˙=x˙=x,x3x,x3,xu1=xu2=xu3=c1etec1+2t1 1c1+2t 1
从收敛速度来看,由于存在指数项 ( 1 ) (1) (1) 式和 ( 2 ) (2) (2) 式要比 ( 3 ) (3) (3) 式快得多。这也验证了当我们在设计系统 u 2 u_2 u2 时,引入的" − x -x x"项,可以对系统的收敛速度有一个很积极的作用。同时,使用反馈线性化这种简单粗暴的方法设计所设计的 u 1 u_1 u1(黄色),虽能使系统稳定,但其效果明显不如李雅普诺夫法设计的 u 2 ( 蓝色 ) , u 3 ( 红色 ) u_2(蓝色), u_3(红色) u2(蓝色),u3(红色)

4. 仿真图与代码

在这里插入图片描述
Mode_system.m

注释:其中 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3 为3个独立的状态变量,分被对应代入 u 1 , u 2 , u 3 u_1, u_2, u_3 u1,u2,u3所得的方程 ( 1 ) , ( 2 ) , ( 3 ) (1),(2),(3) (1),(2),(3) x x x 解,为避免与代码模板中的 u 冲突,代码中使用 "uc1、uc2、uc3"表示输入不同的输入 u u u

function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates  = 3;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 6;   %x_u1,x_u2,x_u3,uc1,uc2,uc3
sizes.NumInputs      = 0;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;   % at least one sample time is needed
sys = simsizes(sizes);
x0  = [10;10;10];
str = [];
ts  = [0 0];
function sys=mdlDerivatives(t,x,u)
x1 = x(1);
x2 = x(2);
x3 = x(3);
uc1 = - x1^2 + x1^3 - x1;
uc2 = - x2^2 - x2;
uc3 = - x3^2;
dx1 = x1^2 - x1^3 + uc1;
dx2 = x2^2 - x2^3 + uc2;
dx3 = x3^2 - x3^3 + uc3;
sys = [dx1;dx2;dx3];
function sys=mdlOutputs(t,x,u)
x1 = x(1);
x2 = x(2);
x3 = x(3);
uc1 = - x1^2 + x1^3 - x1;
uc2 = - x2^2 - x2;
uc3 = - x3^2;
sys = [x1;x2;x3;uc1;uc2;uc3];

相信看完后,你会对非线性系统的基础反馈稳定控制器设计有一个更为清晰的了解,所谓实践出真知,建议初学者跟着这篇文章自己仿真跑一遍,我使用的是s-function函数,你也可以使用Matlab function模块代替。

总算写完了,今天周六,花了一下午的时间尽可能详细地捋清了这篇博客,照顾一下刚入门的初学者,也为记录自己的学历过程,以便日后重温复习,如果本文对你有帮助的话,点个赞再走呗 🫶~

水平有限,若有不足支持,还望广大网友们指正~

参考内容:B站 DR_CAN

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喵汪wow

感谢帅哥美女哥哥姐姐的支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值