线性系统理论及应用GUI设计及仿真
目录
1.控制系统的状态空间模型
1.1.状态空间模型
1.2 传递函数模型
1.3 传递函数转换为状态空间模型
1.4.状态空间模型转换为传递函数
1.5.状态空间模型转化为约当标准型
2.线性系统的时域分析
2.1.矩阵指数函数的计算
2.2.线型定常连续系统的状态空间模型求解
3.线性系统能控性和能观性
3.1.状态能控性判定
3.2.状态能观性的判定
3.3.能控标准型与能观标准型
3.4 按能控标准型分解和按能观标准型分解
3.5.最小实现函数
4.李雅普诺夫稳定性分析
4.1.对称矩阵正定性的判定
4.2.连续系统李雅普诺夫判定
4.3.离散系统李雅普诺夫方程求解
5.线性系统综合
5.1反馈控制系统的模型计算
5.2.系统状态反馈极点配置
5.3降维观测器设计
本文界面设计主要基于MATLAB GUI平台,结合控制系统基础理论和MATLAB控制系统工具箱,实现了用于线性系统理论及应用界面的设计。主要包括: 控制系统的状态空间模型,线性系统的时域分析,线性系统能控性和能观性,李雅普诺夫稳定性分析和线性系统综合。
1.控制系统的状态空间模型
1.1.状态空间模型
已知线型定常连续系统Σ(A,B,C,D),可调用函数ss(·)建立其状态空间模型,调用格式为:sys=ss(A,B,C,D)。
已知线型定常离散系统Σ(G,H,C,D),可调用函数ss(·)建立其状态空间模型,调用格式为:sys=ss(G,H,C,D,Ts)。其中,Ts为采样周期,输出sys为离散系统的状态空间描述。
图2 仿真界面
GUI界面的输入框和选择框上输入各输入项和选择项,按“确定”键,则有如图2所示的仿真界面输出。
1.2 传递函数模型
num=(bm,bm-1, … , b0)
den=(1,an-1, … , a0)
单输入单输出线型定常连续系统的调用格式为:
sys=tf(num,den)
单输入单输出线型定常离散系统的调用格式为:
sys=tf(num,den,Ts)
图3 传递函数模型
1.3 传递函数转换为状态空间模型
[A,B,C,D]=tf2ss(num,den)
执行该命令后,输出为状态空间模型的系数矩阵A,B,C,D。
图4 传递函数转换为状态空间模型
1.4.状态空间模型转换为传递函数
[num,den]=ss2tf(A,B,C,D)
执行该命令后,输出为传递函数分子和分母多项式的系数数组num,den。
图5 状态空间模型转换为传递函数
1.5.状态空间模型转化为约当标准型
[P,J]=jordan(A)
其中,J是A的约当标准型,P是将A变换为J的线性变换矩阵。
图6 状态空间模型转化为约当标准型
2.线性系统的时域分析
2.1.矩阵指数函数的计算
(1)对eAt进行数值计算时:eAt=expm(A)
计算结果如图1所示
图7 eAt数值计算
(2)对eAt进行符号计算时:eAt=expm(A)
其中,t为符号变量,表达式A*t为MATLAB的符号矩阵。
图8 eAt符号计算
2.2.线型定常连续系统的状态空间模型求解
(1)任意输入的系统响应函数lsim()
[y,t,x]=lsim( sys,u,t,x0)
其中,sys为系统的状态空间模型,t为时间坐标数组,u为输入信号对应于t的各时刻输入信号采样值组成的数组,x0为初始状态向量。
图9 任意输入的系统响应
(2)初始状态响应函数initial()
[y,t,x] = initial(sys,x0,t)
其中sys为输入的状态空间模型;x0为给定的初始状态;t为指定仿真计算状态响应的时间区间变量(数组)。
图10 初始状态响应
(3)连续系统离散化
将连续系统的传递函数模型和状态空间模型变换为离散系统的传递函数模型和状态空间模型,其主要调用格式为
sysd = c2d(sys,Ts,method)
其中,sys为输入的连续系统传递函数模型或状态空间模型;
sysd为离散化所得的离散系统传递函数模型或状态空间模型;
Ts为采样周期;
method为离散化方法选择变量,它可以为zoh、foh、tustin和matched等,分别对应于基于0阶和1阶保持器的离散化法、双线性法和零极点匹配法。
图11 连续系统离散化
3.线性系统能控性和能观性
3.1.状态能控性判定
Qc=ctrb(A,B)
Qc=ctrb(sys)
其中,第一种输入格式为直接给定系统矩阵A和输入矩阵B,第二种格式为给定状态空间模型sys。
输出矩阵Qc为计算所得的能控性矩阵。
基于能控性矩阵函数ctrb()及能控性矩阵Qc的秩的计算,就可以进行连续线性定常系统的状态能控性的代数判据判定。
k=rank(A)
k=rank(A,tol)
其中,A为输入矩阵,输出k为A的秩。
d=size(X)
m=size(X,dim)
[d1,d2,d3,...,dn]=size(X)
其中,输出d为数组X的各维的大小组成的一维数组;m为数组X的第dim维的大小;d1,d2,d3,…,dn为数组X的各维的大小。
图11 状态能控性判定
3.2.状态能观性的判定
Qo=obsv(A,C)
Qc=obsv(sys)
其中,第一种输入格式为直接给定系统矩阵A和输入矩阵C,第二种格式为给定状态空间模型sys。
输出矩阵Qo为计算所得的能观性矩阵。
基于能观性矩阵函数obsv()及能观性矩阵Qo秩的计算,就可以进行连续和离散线性定常系统的状态能观性的代数判据判定
图12 连续系统状态能控性判定
图13 离散系统状态能控性判定
3.3.能控标准型与能观标准型
MATLAB提供的建立系统标准型的函数cannon(·)只能用于建立对角线标准型和单输入单输出能控标准型。
图14 能控规范Ⅰ形
3.4 按能控标准型分解和按能观标准型分解
MATLAB提供了.按能控标准型分解的函数ctrbf(·)和按能观标准型分解的函数obsvf(·)。
图15 能控性分解
图16 能观性分解
3.5.最小实现函数
G_minreal=minreal(G)
其中,G_minreal为系统的最小实现,G为系统的状态空间模型。
图17 最小实现
4.李雅普诺夫稳定性分析
4.1.对称矩阵正定性的判定
A_eig=eig(A)
其中A_eig为矩阵A的全部特征值构成的向量。
判别矩阵P的正定性也可利用上述函数,若特征值全部大于0,则P正定。
另一种判定矩阵正定性的函数posit_def()的主要调用格式为
sym_P=posit_def(P)
其中,输入矩阵P须为对称矩阵,
输出sym_P为描述矩阵P的符号串。
输出sym_P为'positive', 'nonnegat','negative','nonposit'和'undifini'分别表示输入矩阵P为正定、非负定(半正定)、负定、非正定(半负定)与不定。
图18 对称矩阵正定性的判定
4.2.连续系统李雅普诺夫判定
求解连续系统李雅普诺夫方程ATP+PA=-Q中的对称矩阵P,调用格式为:
P=lyap(A',Q)
图19 连续系统李雅普诺夫判定
4.3.离散系统李雅普诺夫方程求解
求解离散系统李雅普诺夫方程GTPG-P=-Q中的对称矩阵P,调用格式为:
P=dlyap(G',Q)
图20 离散系统李雅普诺夫判定
5.线性系统综合
5.1反馈控制系统的模型计算
基于反馈系统模型函数fdb_model (),可方便地求解闭环控制系统的状态空间模型和传递函数模型。函数fdb_model()的调用格式为:
clsys = fdb_model(sys,K,H,type1,type2)
其中,sys为状态空间模型;K为反馈矩阵;H为前馈矩阵。
图21 反馈控制系统的模型计算
5.2.系统状态反馈极点配置
对于单输入线性定常系统Σ0(A,b):
K=acker(A,b,p)
其中,p为闭环系统期望极点构成的一维数组,输出K为状态反馈矩阵。
其中,p为闭环系统期望极点构成的一维数组,输出K为状态反馈矩阵。该函数既可用于单输入系统,也可适用于多输入系统。
图22 极点配置
5.3降维观测器设计
降维观测器仿真函数rdobsv_lsim(),
函数obsv_lsim()的调用格式为[yt,eyt,t,xt,ext]=obsv_lsim(sys,G,u,t,x0,ex0)
其中,输入格式的sys为被控对象模型,G为状态观测器增益矩阵,
x0和ex0分别为被控对象和状态观测器的初始状态,
u和t分别为被控系统的输入信号采样序列和时间数组;
输出格式的yt和xt为被控对象的输出响应和状态响应, eyt和ext分别为状态观测器的输出和状态的估计值。
图23 降维观测器设计
相关文章:

线性系统理论及应用GUI设计及仿真
目录 1.控制系统的状态空间模型 1.1.状态空间模型 1.2 传递函数模型 1.3 传递函数转换为状态空间模型 1.4.状态空间模型转换为传递函数 1.5.状态空间模型转化为约当标准型 2.线性系统的时域分析 2.1.矩阵指数函数的计算 2.2.线型定常连续系统的状态空间模型求解 3.线…...

RAG综述汇总
第一篇:Retrieval-Augmented Generation for Large Language Models: A Survey(同济/复旦) 论文链接 1.简介 这篇全面的综述论文详细研究了 RAG 范式的发展,包括 Naive RAG、Advanced RAG 和 Modular RAG。介绍了 RAG 框架的三个基础技术,…...

智慧水利的变革之路:如何通过大数据、物联网和人工智能构建高效、智能、可持续的水利管理新模式
目录 一、引言:智慧水利的时代背景与意义 二、大数据:水利管理的数据基石 (一)数据收集与整合 (二)数据分析与挖掘 三、物联网:水利管理的感知神经 (一)智能感知与监…...

springcloud-gateway 网关组件中文文档
Spring Cloud网关 Greenwich SR5 该项目提供了一个基于Spring生态系统的API网关,其中包括:Spring 5,Spring Boot 2和项目Reactor。Spring Cloud网关的目的是提供一种简单而有效的方法来路由到API,并向它们提供跨领域的关注&#x…...
Android Gradle开发与应用Gradle详细使用
一、Gradle 基础知识 1. Gradle 构建脚本 Gradle 构建脚本通常使用 Groovy 或 Kotlin DSL 编写。Android 项目中有两个主要的 Gradle 构建脚本: a、项目级构建脚本 (build.gradle 或 build.gradle.kts):位于项目的根目录中,用于配置项目范…...
软件架构的23个基本原则:构建稳健、可扩展的系统
软件架构是任何软件项目成功的关键。良好的架构不仅能够支撑软件的功能实现,还能确保其性能、可维护性、可扩展性和安全性。在软件工程领域,经过多年的研究和实践,已经总结出了许多宝贵的原则和模式,用以指导软件架构的设计。以下…...
江苏省生产经营单位安全管理考核(附答案)
单选题 1.生产经营单位的主要负责人在本单位发生重大生产安全事故后逃匿的,由( )处 15 日以下拘留。 A、公安机关 B、检察机关 C、安全生产监督管理部门正确答案:A 2.据一些资料表明,心跳呼吸停止,在()min内进行抢救,约80%可以救活。 A、1 B、2 C、3正确答案:A 3.拉开闸刀时…...

Kafka第四篇——生产数据总体概括,源码解析分区策略,数据收集器,Sender发送线程,key值
目录 流程图以及总体概述 拦截器 分区器以及分区计算策略 为啥进行分区计算? producer生产者怎么知道有哪些分区? 分区计算 如何自定义实现分区器? 想说的在图里啦!宝宝!💡 编辑 如果key值忘记传递了呢&a…...

二叉树的链式结构
前言 Hello,友友们,小编将继续重新开始数据结构的学习,前面讲解了堆的部分知识,今天将讲解二叉树的链式结构的部分内容。 1.概念回顾与新增 二叉树是一种数据结构,其中每个节点最多有两个子节点,分别是左子节点和右子…...

【STM32】在标准库中使用DMA
1.MDA简介 DMA全称Direct Memory Access,直接存储区访问。 DMA传输将数据从一个地址空间复制到另一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和…...

多线程详解
文章目录 多线程创建方式p3一些教程 狂神说 多线程创建方式p3 代码: package com.demo1;//创建线程方式一:继承Thread类,重写run()方法,调用start开启线程/*** 总结:注意,线程开启不一定立即执行,dCPU调度执行*/public class TestThread1 extends Thre…...
软件工程需求之:业务需求与用户需求
在软件开发项目中,"业务需求"和"用户需求"是两个核心概念,它们分别从不同的角度描述了软件应该具备的功能和特性。理解这两个概念的区别对于成功地规划和开发软件至关重要。 业务需求 业务需求主要关注于软件项目如何帮助实现企业…...

Nettyの源码分析
本篇为Netty系列的最后一篇,按照惯例会简单介绍一些Netty相关核心源码。 1、Netty启动源码分析 代码就使用最初的Netty服务器案例,在bind这一行打上断点,观察启动的全过程: 由于某些方法的调用链过深,节约篇幅…...
MySQL远程登录
root是超级管理员,默认情况下,root不能作为远程登录的用户名,远程登录前,需要将登录的数据库在本地登录,修改权限,输入: update user set host % where user root ; 回车键,再输…...

html的作业
目录 作业题目 1.用户注册 A图 B代码 2.工商银行电子汇款单 A图 B代码 3.李白诗词 A图 B代码 4.豆瓣电影 A图 B代码 学习产出: 作业题目 1.用户注册 A图 B代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset&qu…...
【TORCH】查看dataloader里的数据,通过dataloader.dataset或enumerate
文章目录 dataloader.dataset示例代码使用自定义数据集使用 MNIST 数据集 说明 enumerate示例代码说明使用 MNIST 数据集的例子 dataloader.dataset 是的,您可以直接访问 train_loader 的数据集来查看数据,而不必通过 enumerate 遍历数据加载器。可以通…...

KDTree 简单原理与实现
介绍 K-D树是一种二叉树的数据结构,其中每个节点代表一个k维点,可用于组织K维空间中的点,其中K通常是一个非常大的数字。二叉树结构允许对多维空间中的点进行非常有效的搜索,包括最近邻搜索和范围搜索,树中的每个非叶…...

[c++] 可变参数模版
前言 可变参数模板是C11及之后才开始使用,学校的老古董编译器不一定能用 相信大家在刚入门c/c时都接触过printf函数 int printf ( const char * format, ... ); printf用于将数据格式化输出到屏幕上,它的参数非常有意思,可以支持任意数量,任意类型的多参数.而如果我们想实现类…...

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2
QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2 本方案使用了QGraphicsEffect,由于QGraphicsEffect对一些控件会有渲染问题,比如列表、表格等,所以暂时仅作为研究,优先其他方案 在之前的文章中&#…...

数据结构之“队列”(全方位认识)
🌹个人主页🌹:喜欢草莓熊的bear 🌹专栏🌹:数据结构 前言 上期博客介绍了” 栈 “这个数据结构,他具有先进后出的特点。本期介绍“ 队列 ”这个数据结构,他具有先进先出的特点。 目录…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...