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

news2024/12/23 18:52:20

目录

    • 前沿
    • 一、案例1
      • 1. 系统模型
    • 二、案例2
      • 1. 系统模型
      • 2. 稳定性分析
      • 3. 仿真(包含代码)
        • 1. 仿真效果
        • 2. 仿真结果
        • 3. 仿真剖析
        • 4. 仿真图与代码

前沿

定义一个系统 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_{u1} =& c_1e^{-t}\\ \dot{x} = &-x^3-x, \qquad &\Rightarrow x_{u2} =& \frac{1}{\sqrt{e^{c_1+2t}-1}} \\ \dot{x} =& -x^3, \qquad &\Rightarrow x_{u3} =& \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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1974981.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨平台终端工具Tabby安装配置与远程ssh连接Linux_ubuntu详细教程

文章目录 前言1. Tabby下载安装2. Tabby相关配置3. Tabby简单操作4. ssh连接Linux4.1 ubuntu系统安装ssh4.2 Tabby远程ssh连接ubuntu 5. 安装内网穿透工具5.1 创建公网地址5.2 使用公网地址远程ssh连接 6. 配置固定公网地址 前言 今天和大家分享一下如何在Windows系统使用Tabb…

构建LVS负载均衡群集

构建LVS负载均衡群集 实验环境实验环境 201:客户端 101:调度器 (需要用到2个网卡) 102:web 103:web 104:NFS存储 101:(添加一个网卡) 2 [root@localhost ~]# cd /etc/sysconfig/network-scripts/ 3 4 //查看另一个网卡的名字ens36 5 [root@localhost network-scrip…

人工智能深度学习系列—深度学习中的相似性追求:Triplet Loss 全解析

文章目录 1. 背景介绍2. Loss计算公式3. 使用场景4. 代码样例5. 总结 1. 背景介绍 在机器学习和模式识别领域&#xff0c;相似性度量是核心问题之一。Triplet Loss&#xff0c;作为一种特殊的损失函数&#xff0c;被设计用来学习数据的相对距离&#xff0c;从而使得相似样本更…

5.C_Demo_排序

冒泡排序法 原理&#xff1a; 依次比较相邻的两个元素&#xff0c;如果顺序错误就交换。 思路&#xff1a; 这种方法&#xff0c;显然需要很多轮才能完成&#xff0c;每一轮只能排序一个最大值或最小值(第一层for)&#xff0c;将全部的数据排序完成&#xff0c;需要很多轮(第…

第三期书生大模型实战营之书生大模型全链路开源开放体系

一. Introduction 大模型是发展通用人工智能的重要途经 二. 开源历程以及InternLM2 2024年1月17日 InternLM2 2开源 三. 书生浦语2.0的主要亮点 3.1 超长上下文 3.2 综合性能全面提升 3.3 优秀的对话和创作体验 3.4 工具调用能力整体升级 3.5 突出的数理能力和实用的…

Among Us 私服的制作之路

文章目录 Among Us 私服的制作之路这游戏通常包括以下核心元素&#xff1a;角色设定&#xff1a;游戏机制&#xff1a;游戏界面&#xff1a; 第四步&#xff1a;添加社交特性第五&#xff1a;测试与优化方面 十分基础的框架(Web)注意事项 Among Us 私服的制作之路 作者正在准备…

嵌入式:简单的UI框架

1&#xff1a;UI框架简介 除了服务框架外&#xff0c;我们还需要对外显示UI&#xff0c;所以我们就需要一个UI的框架&#xff0c;跟服务框架一样&#xff0c;不用这个UI框架我们也是可以实现&#xff0c;但是这样每个人写的UI都会有差异&#xff0c;需要的事件&#xff0c;数据…

牛客JS题(二十)判断斐波那契数组

注释很详细&#xff0c;直接上代码 涉及知识点&#xff1a; 循环判断斐波那契数列组递归判断斐波那契数列组合法性判断 题干&#xff1a; 我的答案 <!DOCTYPE html> <html><head><meta charset"utf-8" /></head><body><scrip…

嵌入式数据库 sqlite3

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite …

c# .net core项目角色授权机制

前言 角色授权机制是确保应用程序安全性的重要组成部分,它允许开发者根据用户的角色来限制对应用程序中不同资源的访问。 基本概念: 角色授权基于用户角色的访问控制,即根据用户所属的角色来决定其能够访问的资源或执行的操作。在.NET Core中,这通常与身份认证(Authent…

怎么配置一个axios来拦截前后端请求

首先创建一个axios.js文件 导入我们所需要的依赖 import axios from "axios"; import Element from element-ui import router from "./router"; 设置请求头和它的类型和地址 注意先注释这个url,还没有解决跨域问题,不然会出现跨域 // axios.defaults.…

Python Sklearn库SVM算法应用

SVM 是一种有监督学习分类算法&#xff0c;输入值为样本特征值向量和其对应的类别标签&#xff0c;输出具有预测分类功能的模型&#xff0c;当给该模型喂入特征值时&#xff0c;该模型可以它对应的类别标签&#xff0c;从而实现分类。 Sklearn库SVM算法 下面我看一下 Python …

CSS学习 - 选择器

基础选择器 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 类型选择器&…

牛逼,两百行Python代码带你打造一款《天天酷跑》游戏!(附源码)

《天天酷跑》是一款广受欢迎的跑酷类手机游戏&#xff0c;玩家需要控制角色在赛道上奔跑&#xff0c;躲避障碍物&#xff0c;收集金币和道具&#xff0c;以获取高分。虽然完全复现这款游戏的复杂度和图形效果在简单的Python环境中难以实现&#xff08;特别是游戏图形和动画&…

市电220V

概念 市电 220V 是指在中国及许多其他国家使用的标准交流电压,该值是电压的有效值(RMS值,Root Mean Square)。有效值是交流电压或电流的一个测量方式,它表示在一个周期内,交流电的平方平均值等于直流电压(或电流)的值。 有效值在交流电中具有特殊意义,因为交流电的瞬…

华大基因守护新生健康,基因检测助力新生儿疾病筛查

此前&#xff0c;《中国出生缺陷防治报告》预估我国出生缺陷发生率在5.6%左右&#xff0c;无创产前基因检测技术&#xff08;NIPT&#xff09;等先进产前筛查手段&#xff0c;在我国历经十多年的发展历史&#xff0c;华大基因作为行业引领者&#xff0c;深耕基因检测领域&#…

JavaEE 初阶(11)——多线程9之“阻塞队列”

目录 一. 什么是“阻塞队列” 二. 生产者消费者模型 2.1 概念 2.2 组件 2.3 实际应用 2.4 优点 a. 实现“解耦合” b. 流量控制——“削峰填谷” 2.5 代价 a. 更多的机器 b. 通信时间延长 三. 阻塞队列的实现 3.1 简述 3.2 ArrayBlockingQueue的使用 3.3 实现…

数据建模标准-基于事实建模

前情提要 数据模型定义 DAMA数据治理体系中将数据模型定义为一种文档形式&#xff0c;数据模型是用来将数据需求从业务传递到IT,以及在IT内部从分析师、建模师和架构师到数据库设计人员和开发人员的主要媒介&#xff1b; 作用 记录数据需求和建模过程中产生的数据定义&…

dctcp 比 reno,cubic 好在哪

dctcp 相比标准 aimd 如 reno&#xff0c;cubic 到底好在哪&#xff0c;理论上讲 dctcp 本质上也是 aimd 算法&#xff0c;但它的 cwnd 根据 mark rate 来实时缩放&#xff0c;而标准 reno/cubic 则一致缩放 β 0.5(reno) or β 0.3(cubic)&#xff0c;直观上看 dctcp 是连续…

PostgreSQL数据库内核(一):增加系统表pg_test_catalog

目录 编译环境准备 gdb调试 CLion配置 增加系统表pg_test_catalog 编译环境准备 使用PostgreSQL14.5源码版本编译&#xff0c;操作系统CentOS&#xff0c;本地windos系统CLion代码工具&#xff0c;首先下载pg源码&#xff0c;上传CentOS系统&#xff1a; more /etc/os-rel…