
非线性系统的反馈线性化
本文介绍仿射非线性系统的反馈线性化方法的基本原理和实现细节,介绍相对阶、李导数、微分同胚、最小相位、内部动态等名词解释,并举一个例子来说明线性化过程,最后展示仿真结果。
摘要 本文介绍仿射非线性系统的反馈线性化方法的基本原理和实现细节,介绍相对阶、李导数、微分同胚、最小相位、内部动态等名词解释,并举一个例子来说明线性化过程,最后展示仿真结果。
仿射非线性或非仿射非线性指对输入是否是线性的。例如,系统能够写成
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′=∂x∂hx′=∂x∂h(f+gu)=∂x∂hf+∂x∂hgu
如果
∂
h
∂
x
g
≠
0
\frac{\partial h}{\partial x}g\neq 0
∂x∂hg=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=∂x∂hg1(−∂x∂hf−ky)
代入即可得到
y
′
=
−
k
y
y'=-ky
y′=−ky,指数收敛。
如果
∂
h
∂
x
g
=
0
\frac{\partial h}{\partial x}g=0
∂x∂hg=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∂(∂x∂hf)x′=∂x∂(∂x∂hf)(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=∂x∂hf(x)Lf2h=∂x∂(∂x∂hf)f(x)LgLfh=∂x∂(∂x∂hf)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}
∂x∂T(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⋮ξρ
=
yy′⋮y(ρ−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,1≤i≤ρ−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′′===∂x∂hf+∂x∂hgu=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=−2x1x2−4y′−4y,则
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′′=−4y′−4y,y(t)=(C1+C2t)e−2t,输出稳定。
下面设计变换查看系统内部是否稳定。定义变换
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)=0∂x1∂η2ex2+∂x2∂η=0
η
(
x
)
\eta(x)
η(x) 的一个解为
η
(
x
)
=
x
1
−
2
e
x
2
\eta(x)=x_1-2\text{e}^{x_2}
η(x)=x1−2ex2
得到可逆变换
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=η=x1−2ex2
可见雅可比矩阵
∂
T
(
x
)
∂
x
\frac{\partial T(x)}{\partial x}
∂x∂T(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}
η′=x1′−2ex2x2′=(−x1+2ex2u)−2ex2(2x1x2+u)=−x1−4x1x2ex2
可见输入
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,η=x1−2ex2 代入得
η
=
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}
η=η′==x1−2e0.5ξ2,x1=η+2e0.5ξ2−(η+2e0.5ξ2)−4(η+2e0.5ξ2)0.5ξ2e0.5ξ2−η−4ξ2eξ2−2(ηξ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ξ2−2(ηξ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==−2x1x2−4y′−4y−2x1x2−8x2−8x3
系统结构框图如图所示。
设置
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;
}
更多推荐
所有评论(0)