jjzjj

Lyapunov稳定性分析3(离散时间系统)

爱趣无穷 2024-01-06 原文

Lyapunov稳定性分析3(离散时间系统)


注:Lyapunov稳定性理论主要内容:李雅普诺夫第一方法和第二方法,本篇文章继续上一篇分析线性离散时间系统稳定性,非线性系统稳定性将单独写文章进行分析!敬请关注,谢谢~

一、李雅普诺夫稳定性判定

1.1 Lyapunov两类稳定性方法分析:


(1)Lyapunov渐近稳定的充要条件第一方法):A的特征值模均小于1
(2)Lyapunov渐近稳定的充要条件第二方法):对于任意的正定矩阵Q,存在**正定矩阵P**满足Lyapunov方程:

证明:
和连续时间系统一样,取Lyapunov函数为:

则有


与连续时间系统一样,令:

即为Lyapunov方程,则:

只要Q正定,Lyapunov函数变化率为负数,能量随着时间增加肯定逐渐减小至收敛。和连续时间系统一样,一般也是先确定Q,然后求解Lyapunov方程,最后找到正定的PQ一般取单位阵。

1.2 总结:

二、举例

2.1 MATLAB函数形式:



注意:
同连续时间系统Lyapunov稳定性一样,这里只求解开环系统稳定性,只分析系统矩阵A,还没有涉及到闭环系统反馈矩阵K以及闭环状态状态矩阵Acl=(A-BK)

2.2 MATLAB函数实例:

eg1. 确定二阶系统在原点处的稳定性


Lyapunov方程中,取Q =I,得

>> P=[52/27 40/27;40/27 100/27]

P =
    1.9259    1.4815
    1.4815    3.7037

用MATLAB函数dlyap()

>> A=[0 0.5;-0.5 1];Q=eye(2,2)

Q =
    1     0
    0     1

>> P=dlyap(A',Q)

P =
   1.9259   -1.4815
  -1.4815    3.7037

从而系统在原点的平衡状态是大范围渐近稳定的。

eg2. 求线性定常离散时间系统的稳定性条件

eg3. 求线性定常离散时间系统的稳定性条件

>> eig(A)
ans =
    1
    1

A的特征值模均等于1;所以该系统不稳定,Lyapunov方程无解

>> A=[0.99 0;0 0.99];Q=eye(2,2);dlyap(A',Q)

ans =
  50.2513         0
        0   50.2513
        
>> eig(A)
ans =
   0.9900
   0.9900

A的特征值模均等于1;所以该系统稳定,Lyapunov方程有解

三、离散Lyapunov方程的解

形式

区别:与第一、二章的区别在于在Q的基础上加了KTRK

>> A

A =

   1.1000    2.0000
        0    0.9500

>> B

B =

        0
   0.0790
   >> Q

Q =

    1     0
    0     1

>> R

R =

   0.1000

先用离散dlqr()函数求解最优反馈增益矩阵K

[K,P,r] = dlqr(A,B,Q,R)
K =
    2.4950   12.5106

P =
    4.0373    8.5226
    8.5226   31.5400

r =
   0.5308 + 0.2651i
   0.5308 - 0.2651i

① 根据lyapunov方程可知闭环系统矩阵Q2=Q+KTRK
② 再求解闭环系统矩阵Acl

>> Acl=A-B*K
Acl =
   1.1000    2.0000
  -0.1971   -0.0383

>> eig(Acl)
ans =
  0.5308 + 0.2651i
  0.5308 - 0.2651i

闭环系统矩阵特征值在单位圆内,所以系统稳定
再来求解Lyapunov方程P

>> P=dlyap(Acl',Q2)
P =
 4.0373    8.5226
 8.5226   31.5400

再求解反馈矩阵Kmpc

Q_ =

   1.0000         0         0         0         0         0         0         0
        0    1.0000         0         0         0         0         0         0
        0         0    1.0000         0         0         0         0         0
        0         0         0    1.0000         0         0         0         0
        0         0         0         0    1.0000         0         0         0
        0         0         0         0         0    1.0000         0         0
        0         0         0         0         0         0    4.0373    8.5226
        0         0         0         0         0         0    8.5226   31.5400

>> K_=(Fai'*Q_*Fai+R_)^(-1)*Fai'*Q_*F

K_ =

   2.4950   12.5106
   0.2785    4.5107
  -0.5822    0.3856
  -0.7165   -1.1786

发现第一个k跟dlqr()求出的结果相同

有关Lyapunov稳定性分析3(离散时间系统)的更多相关文章

  1. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  2. ruby-on-rails - Ruby 检查日期时间是否为 iso8601 并保存 - 2

    我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby​​是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查

  3. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  4. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  5. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  6. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  7. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  8. sql - 查询忽略时间戳日期的时间范围 - 2

    我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时

  9. ruby - 在没有基准或时间的情况下用 Ruby 测量用户时间或系统时间 - 2

    因为我现在正在做一些时间测量,我想知道是否可以在不使用Benchmark类或命令行实用程序time的情况下测量用户时间或系统时间。使用Time类只显示挂钟时间,而不显示系统和用户时间,但是我正在寻找具有相同灵active的解决方案,例如time=TimeUtility.now#somecodeuser,system,real=TimeUtility.now-time原因是我有点不喜欢Benchmark,因为它不能只返回数字(编辑:我错了-它可以。请参阅下面的答案。)。当然,我可以解析输出,但感觉不对。*NIX系统的time实用程序也应该可以解决我的问题,但我想知道是否已经在Ruby中实

  10. ruby - 以毫秒为单位获取当前系统时间 - 2

    在Ruby中,以毫秒为单位获取自纪元(1970)以来的当前系统时间的正确方法是什么?我试过了Time.now.to_i,好像不是我想要的结果。我需要结果显示毫秒并且使用long类型,而不是float或double。 最佳答案 (Time.now.to_f*1000).to_iTime.now.to_f显示包含十进制数字的时间。要获得毫秒数,只需将时间乘以1000。 关于ruby-以毫秒为单位获取当前系统时间,我们在StackOverflow上找到一个类似的问题:

随机推荐