You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性化系统与原非线性系统控制器稳态输入符号相反问题咨询

线性化系统与原非线性系统控制器稳态输入符号相反问题咨询

我现在遇到一个很奇怪的问题,想请教一下各位:

我有一个非线性系统,打算先对其线性化后设计控制器,再把这个控制器直接用到原非线性系统上验证性能。目前步骤都做完了,但发现两个系统的稳态控制输入符号完全相反:线性化系统是-88,而非线性系统是+35。

系统模型

我的非线性系统状态方程如下:
$$\dot{x_1}= x2$$
$$\dot{x_2} = -10x_1+1.8{x_1^2}-0.25x_2-30 +u$$

当输入$u=0$时,系统的平衡点是$(-2.16,0)$(稳定点)和$(7.71,0)$(鞍点),我选择在鞍点附近做线性化,得到的矩阵:

  • $A= \begin{bmatrix}0&1 \ 17.75&-0.25\end{bmatrix}$
  • $B= \begin{bmatrix}0 \ 1\end{bmatrix}$
  • $C=[1, 0]$(输出$y=x_1$)

控制器设计(极点配置)

我用Matlab做极点配置设计控制器,代码如下:

clc
clear all

A=[0 1;17.75 -0.25]
B=[0 1]'
C=[1 0]
D=zeros(1,1);

sys = ss(A,B,C,D);
G = tf(sys)
step(G);

PO=10;
ts=5;
zita = abs(log(PO/100))/(sqrt(pi^2 + (log(PO/100))^2)); % 根据ts和PO计算阻尼比
wn = 4/(zita*ts);
alpha = -zita*wn;
wd = wn*sqrt(1-zita^2);

p1 = alpha + j*wd;
p2 = alpha - j*wd;
p3=10*real(p2)

Aaug = [A zeros(2, 1); -C 0];
Baug = [B;0];
Caug = [C 0];
Daug = D;

K=place(Aaug,Baug,[p1 p2 p3]);
Kp=K(1,1:2);
Ki=K(1,3);

设计完后搭建Simulink仿真,线性化系统的输出$y$能跟踪上期望参考输入,但稳态控制输入是-88。

非线性系统仿真结果

之后我把完全相同的控制方案用到原非线性系统上,非线性系统的状态方程实现如下:

function xdotdot= fcndot(x,xp,u)
% 定义常数
ma = -10;
maa= 1.8;
md = -0.25;
delta = -30*1;
% 非线性方程
xdotdot = ma*x+maa*x*x+md*xp+delta+u

仿真时我让系统工作在鞍点附近,参考输入和线性化系统一致,输出$y$也能跟踪参考,误差、状态量的波形和线性化系统差不多,但稳态控制输入却是+35,和线性化系统的符号完全相反。

我现在很困惑:为什么其他信号都差不多,唯独控制输入的符号差异这么大?是我哪里出错了吗?这种情况有可能发生吗?

备注:内容来源于stack exchange,提问作者Marià

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 09:32:38