非线性系统的反馈线性化

摘要 本文介绍仿射非线性系统的反馈线性化方法的基本原理和实现细节,介绍相对阶、李导数、微分同胚、最小相位、内部动态等名词解释,并举一个例子来说明线性化过程,最后展示仿真结果。
  仿射非线性或非仿射非线性指对输入是否是线性的。例如,系统能够写成 x ′ = f ( x ) + g ( x ) u x'= f(x) + g(x)u x=f(x)+g(x)u 的形式,而不是 x ′ = f ( x ) + g ( x ) u 2 x'= f(x) + g(x)u^2 x=f(x)+g(x)u2,或者 x ′ = f ( x , u ) x'= f(x,u) x=f(x,u) 中提不出 u u u,如果能提出一个 u u u 就是仿射非线性,否则就是非仿射非线性。
  本文只涉及单输入单输出的仿射非线性系统,但有多个状态。

相对阶

对系统
x ⃗ ′ = f ⃗ ( x ⃗ ) + g ⃗ ( x ⃗ ) u y = h ⃗ ( x ⃗ ) \begin{aligned} & \vec{x}'= \vec{f}(\vec{x}) + \vec{g}(\vec{x})u \\ & y = \vec{h}(\vec{x}) \\ \end{aligned} x =f (x )+g (x )uy=h (x )
设计 u u u 使输出 y y y 指数收敛。
   y y y 的表达式中不含 u u u,将 y y y 求导得到
y ′ = ∂ h ∂ x x ′ = ∂ h ∂ x ( f + g u ) = ∂ h ∂ x f + ∂ h ∂ x g u y'=\frac{\partial h}{\partial x}x' =\frac{\partial h}{\partial x}(f+gu) =\frac{\partial h}{\partial x}f+\frac{\partial h}{\partial x}gu y=xhx=xh(f+gu)=xhf+xhgu
如果 ∂ h ∂ x g ≠ 0 \frac{\partial h}{\partial x}g\neq 0 xhg=0,那么就能找到 y ′ y' y u u u 的关系,取
u = 1 ∂ h ∂ x g ( − ∂ h ∂ x f − k y ) u=\frac{1}{\frac{\partial h}{\partial x}g}(-\frac{\partial h}{\partial x}f-ky) u=xhg1(xhfky)
代入即可得到 y ′ = − k y y'=-ky y=ky,指数收敛。
如果 ∂ h ∂ x g = 0 \frac{\partial h}{\partial x}g=0 xhg=0,也就是 y ′ y' y 中不显含 u u u,那么继续求导
y ′ ′ = ∂ ( ∂ h ∂ x f ) ∂ x x ′ = ∂ ( ∂ h ∂ x f ) ∂ x ( f + g u ) = L f 2 h + L g L f h u y''=\frac{\partial(\frac{\partial h}{\partial x}f)}{\partial x}x' =\frac{\partial(\frac{\partial h}{\partial x}f)}{\partial x}(f+gu) =L_f^2h + L_gL_fhu y′′=x(xhf)x=x(xhf)(f+gu)=Lf2h+LgLfhu
其中
L f h = ∂ h ∂ x f ( x ) L f 2 h = ∂ ( ∂ h ∂ x f ) ∂ x f ( x ) L g L f h = ∂ ( ∂ h ∂ x f ) ∂ x g ( x ) y ′ = L f h ( x ) + L g h ( x ) u \begin{aligned} & L_fh=\frac{\partial h}{\partial x}f(x) \\ & L_f^2h=\frac{\partial(\frac{\partial h}{\partial x}f)}{\partial x}f(x) \\ & L_gL_fh=\frac{\partial(\frac{\partial h}{\partial x}f)}{\partial x}g(x) \\ & y'=L_fh(x)+L_gh(x)u \end{aligned} Lfh=xhf(x)Lf2h=x(xhf)f(x)LgLfh=x(xhf)g(x)y=Lfh(x)+Lgh(x)u
L g , L f L_g,L_f Lg,Lf 称作李导数。继续下去,如果
L g L f ρ − 2 h ( x ) = 0 , L g L f ρ − 1 h ( x ) ≠ 0 L_gL_f^{\rho-2}h(x)=0,L_gL_f^{\rho-1}h(x)\neq 0 LgLfρ2h(x)=0,LgLfρ1h(x)=0
则称系统具有相对阶 ρ \rho ρ,此时
y ( ρ ) = L f ρ h ( x ) + L g L f ρ − 1 h ( x ) u y ( ρ − 1 ) = L f ρ − 1 h ( x ) + L g L f ρ − 2 h ( x ) u = L f ρ − 1 h ( x ) \begin{aligned} y^{(\rho)} =& L_f^\rho h(x)+L_gL_f^{\rho-1}h(x)u \\ y^{(\rho-1)} =& L_f^{\rho-1} h(x)+L_gL_f^{\rho-2}h(x)u=L_f^{\rho-1} h(x) \\ \end{aligned} y(ρ)=y(ρ1)=Lfρh(x)+LgLfρ1h(x)uLfρ1h(x)+LgLfρ2h(x)u=Lfρ1h(x)
也就是对 y y y ρ \rho ρ 阶导后才能显含 u u u y = f ( x ) + g ( x ) u y=f(x)+g(x)u y=f(x)+g(x)u 的相对阶为 0 0 0

微分同胚

  输出稳定不一定能得出状态稳定,因此引入可逆变换,把系统内部的所有状态分成内部动态和输出动态两部分。前面相对阶的概念是输出动态,下面引入微分同胚的概念研究内部动态。
  可逆变换 z = T ( x ) z=T(x) z=T(x) 中, z ( t ) z(t) z(t) x ( t ) x(t) x(t) 都可导,雅可比行列式 ∂ T ( x ) ∂ x \frac{\partial T(x)}{\partial x} xT(x) 不为0。(大概率?)也就是 x x x T ( x ) T(x) T(x) 等价,可以互换,此时称 x x x T ( x ) T(x) T(x) 是微分同胚(diffeomorphism)的。
  取变换
[ ξ 1 ξ 2 ⋮ ξ ρ ] = [ y y ′ ⋮ y ( ρ − 1 ) ] \begin{bmatrix} \xi_1 \\ \xi_2 \\ \vdots \\ \xi_\rho \end{bmatrix} =\begin{bmatrix} y \\ y' \\ \vdots \\ y^{(\rho-1)} \end{bmatrix} ξ1ξ2ξρ = yyy(ρ1)
这里列出了 ρ \rho ρ 个状态,但 x x x n n n 个状态,为了能让 x x x z z z 微分同胚,需要对 z z z 再补充 n − ρ n-\rho nρ 个状态,记作 η \eta η,即
z = T ( x ) = [ ξ η ] z=T(x)=\begin{bmatrix} \xi \\ \hdashline \eta \end{bmatrix} z=T(x)=[ξη]
其中 η = η ( x ) \eta=\eta(x) η=η(x) 需要满足抵消条件
∂ η ( x ) ∂ x g ( x ) = 0 \frac{\partial\eta(x)}{\partial x}g(x)=0 xη(x)g(x)=0
因为当满足抵消条件时
d d t η ( x ) = ∂ η ( x ) ∂ x ( f + g u ) = ∂ η ( x ) ∂ x f \frac{\text{d}}{\text{d}t}\eta(x) =\frac{\partial\eta(x)}{\partial x}(f+gu) =\frac{\partial\eta(x)}{\partial x}f dtdη(x)=xη(x)(f+gu)=xη(x)f
可以看出 η ( x ) \eta(x) η(x) 的导数与 u u u 无关,完全是内部动态。除了抵消条件以外还需要满足微分同胚的条件,后面会举例说明。
(note: 可以类比前 ρ \rho ρ 个状态客观,后 n − ρ n-\rho nρ 个状态不可观)
(note: 当 ρ = 0 , ρ = n , 0 < ρ < n \rho=0,\rho=n,0<\rho<n ρ=0,ρ=n,0<ρ<n 时分别称作可反馈线性化、不可反馈线性化、部分反馈线性化系统)
  最终变换后的标准型写作
η ′ = f 0 ( η , ξ ) ξ i ′ = ξ i + 1 , 1 ≤ i ≤ ρ − 1 ξ ρ ′ = L f ρ h ( x ) + L g L f ( ρ − 1 ) h ( x ) u y = ξ 1 \begin{aligned} & \eta'=f_0(\eta,\xi) \\ & \xi_i'=\xi_{i+1},1\le i\le\rho-1 \\ & \xi_\rho'=L_f^\rho h(x)+L_gL_f^{(\rho-1)}h(x)u \\ & y=\xi_1 \end{aligned} η=f0(η,ξ)ξi=ξi+1,1iρ1ξρ=Lfρh(x)+LgLf(ρ1)h(x)uy=ξ1

η ′ = f 0 ( η , ξ ) ξ ′ = A c ξ + B c [ L f ρ h ( x ) + L g L f ( ρ − 1 ) h ( x ) u ] y = C c ξ \begin{aligned} & \eta'=f_0(\eta,\xi) \\ & \xi'=A_c\xi+B_c\left[L_f^\rho h(x)+L_gL_f^{(\rho-1)}h(x)u\right] \\ & y=C_c\xi \end{aligned} η=f0(η,ξ)ξ=Acξ+Bc[Lfρh(x)+LgLf(ρ1)h(x)u]y=Ccξ
其中下面两式(即 ξ ′ \xi' ξ y ′ y' y)展开写作(以 ρ = 3 \rho=3 ρ=3 为例)
d d t [ ξ 1 ξ 2 ξ 3 ] = [ 0 1 0 0 0 1 0 0 0 ] [ ξ 1 ξ 2 ξ 3 ] + [ 0 0 1 ] [ L f ρ h ( x ) + L g L f ( ρ − 1 ) h ( x ) u ] y = [ 1 0 0 ] [ ξ 1 ξ 2 ξ 3 ] \begin{aligned} & \frac{\text{d}}{\text{d}t}\begin{bmatrix} \xi_1 \\ \xi_2 \\ \xi_3 \end{bmatrix} =\begin{bmatrix} 0 & 1 & 0 \\ 0 & 0 & 1 \\ 0 & 0 & 0 \\ \end{bmatrix} \begin{bmatrix} \xi_1 \\ \xi_2 \\ \xi_3 \end{bmatrix} +\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix}\left[L_f^\rho h(x)+L_gL_f^{(\rho-1)}h(x)u\right] \\ & y=\begin{bmatrix} 1 & 0 & 0 \end{bmatrix} \begin{bmatrix} \xi_1 \\ \xi_2 \\ \xi_3 \end{bmatrix} \end{aligned} dtd ξ1ξ2ξ3 = 000100010 ξ1ξ2ξ3 + 001 [Lfρh(x)+LgLf(ρ1)h(x)u]y=[100] ξ1ξ2ξ3
能把仿射非线性系统转化成这种标准型就可以实现反馈线性化。

一个例子

下面举一个反馈线性化的例子,后面给出仿真证明推导过程无误。
[ x ˙ 1 x ˙ 2 x ˙ 3 ] = [ − x 1 2 x 1 x 2 x 2 ] + [ 2 e x 2 1 0 ] u y = 2 x 3 \begin{aligned} &\begin{bmatrix} \dot{x}_1 \\ \dot{x}_2 \\ \dot{x}_3 \end{bmatrix} =\begin{bmatrix} -x_1 \\ 2x_1x_2 \\ x_2 \end{bmatrix} +\begin{bmatrix} 2\text{e}^{x_2} \\ 1 \\ 0 \end{bmatrix}u \\ & y = 2x_3 \end{aligned} x˙1x˙2x˙3 = x12x1x2x2 + 2ex210 uy=2x3
y ′ = ∂ h ∂ x f + ∂ h ∂ x g u = L f h = [ 0 0 2 ] [ − x 1 2 x 1 x 2 x 2 ] + [ 0 0 2 ] [ 2 e x 2 1 0 ] u = 2 x 2 y ′ ′ = L f 2 h + L g L f h u = [ 0 2 0 ] [ − x 1 2 x 1 x 2 x 2 ] + [ 0 2 0 ] [ 2 e x 2 1 0 ] u = 4 x 1 x 2 + 2 u \begin{aligned} y' =& \frac{\partial h}{\partial x}f+\frac{\partial h}{\partial x}gu=L_fh \\ =& \begin{bmatrix} 0 & 0 & 2 \end{bmatrix} \begin{bmatrix} -x_1 \\ 2x_1x_2 \\ x_2 \end{bmatrix} +\begin{bmatrix} 0 & 0 & 2 \end{bmatrix} \begin{bmatrix} 2\text{e}^{x_2} \\ 1 \\ 0 \end{bmatrix}u \\ =& 2x_2 \\ y'' =& L_f^2h+L_gL_fhu \\ =& \begin{bmatrix} 0 & 2 & 0 \end{bmatrix} \begin{bmatrix} -x_1 \\ 2x_1x_2 \\ x_2 \end{bmatrix} +\begin{bmatrix} 0 & 2 & 0 \end{bmatrix} \begin{bmatrix} 2\text{e}^{x_2} \\ 1 \\ 0 \end{bmatrix}u \\ =& 4x_1x_2 + 2u \\ \end{aligned} y===y′′===xhf+xhgu=Lfh[002] x12x1x2x2 +[002] 2ex210 u2x2Lf2h+LgLfhu[020] x12x1x2x2 +[020] 2ex210 u4x1x2+2u
可以看出系统相对阶为2。取 u = − 2 x 1 x 2 − 4 y ′ − 4 y u=-2x_1x_2-4y'-4y u=2x1x24y4y,则 y ′ ′ = − 4 y ′ − 4 y , y ( t ) = ( C 1 + C 2 t ) e − 2 t y''=-4y'-4y,y(t)=(C_1+C_2t)\text{e}^{-2t} y′′=4y4y,y(t)=(C1+C2t)e2t,输出稳定。
  下面设计变换查看系统内部是否稳定。定义变换
T ( x ) = [ ξ 1 ξ 2 η ] = [ 2 x 3 2 x 2 η ( x ) ] \begin{aligned} T(x)=\begin{bmatrix} \xi_1 \\ \xi_2 \\ \eta \end{bmatrix} =\begin{bmatrix} 2x_3 \\ 2x_2 \\ \eta(x) \end{bmatrix} \end{aligned} T(x)= ξ1ξ2η = 2x32x2η(x)
其中 η ( x ) \eta(x) η(x) 需要满足抵消条件
∂ η ( x ) ∂ x g ( x ) = 0 ∂ η ∂ x 1 2 e x 2 + ∂ η ∂ x 2 = 0 \frac{\partial\eta(x)}{\partial x}g(x)=0 \\ \frac{\partial\eta}{\partial x_1}2\text{e}^{x_2} +\frac{\partial\eta}{\partial x_2}=0 xη(x)g(x)=0x1η2ex2+x2η=0
η ( x ) \eta(x) η(x) 的一个解为
η ( x ) = x 1 − 2 e x 2 \eta(x)=x_1-2\text{e}^{x_2} η(x)=x12ex2
得到可逆变换 z = T ( x ) z=T(x) z=T(x)
z 1 = ξ 1 = 2 x 3 z 2 = ξ 2 = 2 x 2 z 3 = η = x 1 − 2 e x 2 \begin{aligned} & z_1 = \xi_1 = 2x_3 \\ & z_2 = \xi_2 = 2x_2 \\ & z_3 = \eta = x_1-2\text{e}^{x_2} \\ \end{aligned} z1=ξ1=2x3z2=ξ2=2x2z3=η=x12ex2
可见雅可比矩阵 ∂ T ( x ) ∂ x \frac{\partial T(x)}{\partial x} xT(x) 非奇异。此时需要注意的是如果取 η ( x ) = x 3 \eta(x)=x_3 η(x)=x3 也能满足 ( ∂ η / ∂ x ) g = 0 (\partial\eta/\partial x)g=0 (η/x)g=0 的条件,但此时 η ( x ) \eta(x) η(x) 中不包含 x 1 x_1 x1 项导致雅可比矩阵的第一列全为0,不满足微分同胚的条件。
  继续化成标准型,
η ′ = x 1 ′ − 2 e x 2 x 2 ′ = ( − x 1 + 2 e x 2 u ) − 2 e x 2 ( 2 x 1 x 2 + u ) = − x 1 − 4 x 1 x 2 e x 2 \eta'=x_1'-2\text{e}^{x_2}x_2' =(-x_1+2\text{e}^{x_2}u)-2\text{e}^{x_2}(2x_1x_2+u) =-x_1-4x_1x_2\text{e}^{x_2} η=x12ex2x2=(x1+2ex2u)2ex2(2x1x2+u)=x14x1x2ex2
可见输入 u u u 被抵消了。标准型中 η ′ = f 0 ( η , ξ ) \eta'=f_0(\eta,\xi) η=f0(η,ξ),所以接下来要把等号右边的 x 1 , x 2 x_1,x_2 x1,x2 换成 η , ξ \eta,\xi η,ξ。将 x 2 = 0.5 ξ 2 , η = x 1 − 2 e x 2 x_2=0.5\xi_2,\eta = x_1-2\text{e}^{x_2} x2=0.5ξ2,η=x12ex2 代入得
η = x 1 − 2 e 0.5 ξ 2 , x 1 = η + 2 e 0.5 ξ 2 η ′ = − ( η + 2 e 0.5 ξ 2 ) − 4 ( η + 2 e 0.5 ξ 2 ) 0.5 ξ 2 e 0.5 ξ 2 = − η − 4 ξ 2 e ξ 2 − 2 ( η ξ 2 + 1 ) e 0.5 ξ 2 = f 0 ( η , ξ ) \begin{aligned} \eta =& x_1-2\text{e}^{0.5\xi_2},x_1=\eta+2\text{e}^{0.5\xi_2} \\ \eta' =& -(\eta+2\text{e}^{0.5\xi_2}) -4(\eta+2\text{e}^{0.5\xi_2})0.5\xi_2\text{e}^{0.5\xi_2} \\ =& -\eta-4\xi_2\text{e}^{\xi_2}-2(\eta\xi_2+1)\text{e}^{0.5\xi_2} =f_0(\eta,\xi) \\ \end{aligned} η=η==x12e0.5ξ2,x1=η+2e0.5ξ2(η+2e0.5ξ2)4(η+2e0.5ξ2)0.5ξ2e0.5ξ2η4ξ2eξ22(ηξ2+1)e0.5ξ2=f0(η,ξ)
这样就可以写成完整的标准型形式
η = − η − 4 ξ 2 e ξ 2 − 2 ( η ξ 2 + 1 ) e 0.5 ξ 2 [ ξ 1 ′ ξ 2 ′ ] = [ 0 1 0 0 ] [ ξ 1 ξ 2 ] + [ 0 1 ] ( 4 x 1 x 2 + 2 u ) y = [ 1 0 ] ξ 1 \begin{aligned} \eta =& -\eta-4\xi_2\text{e}^{\xi_2}-2(\eta\xi_2+1)\text{e}^{0.5\xi_2} \\ \begin{bmatrix} \xi_1' \\ \xi_2' \end{bmatrix} =& \begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix} \begin{bmatrix} \xi_1 \\ \xi_2 \end{bmatrix} +\begin{bmatrix} 0 \\ 1 \end{bmatrix}(4x_1x_2+2u) \\ y =& \begin{bmatrix} 1 & 0 \end{bmatrix} \xi_1 \end{aligned} η=[ξ1ξ2]=y=η4ξ2eξ22(ηξ2+1)e0.5ξ2[0010][ξ1ξ2]+[01](4x1x2+2u)[10]ξ1

最小相位系统

η ′ = f 0 ( η , ξ ) \eta'=f_0(\eta,\xi) η=f0(η,ξ) 中,当 ξ = 0 \xi=0 ξ=0 时系统是否渐进稳定,如果是就是最小相位系统。例子中, η ′ = f 0 ( η , 0 ) = − η − 2 \eta'=f_0(\eta,0)=-\eta-2 η=f0(η,0)=η2 稳定,是最小相位系统。

仿真

系统输入设计为
u = − 2 x 1 x 2 − 4 y ′ − 4 y = − 2 x 1 x 2 − 8 x 2 − 8 x 3 \begin{aligned} u =& -2x_1x_2-4y'-4y \\ =& -2x_1x_2-8x_2-8x_3 \end{aligned} u==2x1x24y4y2x1x28x28x3
系统结构框图如图所示。
在这里插入图片描述
设置 x 2 ( 0 ) = 1 , x 1 ( 0 ) = x 3 ( 0 ) = 0 x_2(0)=1,x_1(0)=x_3(0)=0 x2(0)=1,x1(0)=x3(0)=0,仿真结果如图所示。
在这里插入图片描述
simucpp 代码如下

#include <iostream>
#include <cmath>
#include "simucpp.hpp"
using namespace simucpp;

class Plant: public PackModule {
public:
    Plant(Simulator *sim) {
        intx1 = new UIntegrator(sim, "intx1");
        intx2 = new UIntegrator(sim, "intx2");
        intx3 = new UIntegrator(sim, "intx3");
        fcnx1 = new UFcnMISO(sim, "fcnx1");
        fcnx2 = new UFcnMISO(sim, "fcnx2");
        in1 = new UGain(sim, "in1");
        sim->connectU(intx1, fcnx1);
        sim->connectU(intx2, fcnx1);
        sim->connectU(in1,   fcnx1);
        sim->connectU(intx1, fcnx2);
        sim->connectU(intx2, fcnx2);
        sim->connectU(in1,   fcnx2);
        sim->connectU(fcnx1, intx1);
        sim->connectU(fcnx2, intx2);
        sim->connectU(fcnx2, intx2);
        sim->connectU(intx2, intx3);
        intx2->Set_InitialValue(1);
        fcnx1->Set_Function([](double *u){
            double x1 = u[0], x2 = u[1], u1 = u[2];
            return 2*exp(x2)*u1 - x1;
        });
        fcnx2->Set_Function([](double *u){
            double x1 = u[0], x2 = u[1], u1 = u[2];
            return 2*x1*x2 + u1;
        });
    }
private:
    virtual PUnitModule Get_InputPort(uint n=0) const override {
        if (n==0) return in1;
        return nullptr;
    }
    virtual PUnitModule Get_OutputPort(uint n=0) const override {
        if (n==0) return intx1;
        if (n==1) return intx2;
        if (n==2) return intx3;
        return nullptr;
    }
    UIntegrator *intx1=nullptr;
    UIntegrator *intx2=nullptr;
    UIntegrator *intx3=nullptr;
    UFcnMISO *fcnx1=nullptr;
    UFcnMISO *fcnx2=nullptr;
    UGain *in1=nullptr;
};

int main() {
    Simulator sim1(5);
    auto *out1 = new UOutput(&sim1, "out1");
    auto *out2 = new UOutput(&sim1, "out2");
    auto *out3 = new UOutput(&sim1, "out3");
    auto fcnu = new UFcnMISO(&sim1, "fcnu");
    Plant *plant1 = new Plant(&sim1);
    sim1.connectU(fcnu, plant1, 0);
    sim1.connectU(plant1, 0, fcnu);
    sim1.connectU(plant1, 1, fcnu);
    sim1.connectU(plant1, 2, fcnu);
    sim1.connectU(plant1, 0, out1);
    sim1.connectU(plant1, 1, out2);
    sim1.connectU(plant1, 2, out3);
    fcnu->Set_Function([](double *u) {
        return -2*u[0]*u[1] -8*u[1] -8*u[2];
    });
    sim1.Initialize();
    sim1.Simulate();
    sim1.Plot();
    return 0;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值