连续离散混合系统控制与仿真

news2024/9/23 5:23:53

简单二阶系统

先研究最简单的二阶积分器串联型系统
x ˙ 1 = x 2 x ˙ 2 = u \begin{aligned} & \dot x_1 = x_2 \\ & \dot x_2 = u \\ \end{aligned} x˙1=x2x˙2=u
使用零阶保持法离散化(见附录),
A = [ 0 1 0 0 ] , B = [ 0 1 ] A=\begin{bmatrix} 0 & 1 \\ 0 & 0 \end{bmatrix},\quad B=\begin{bmatrix} 0 \\ 1 \end{bmatrix} A=[0010],B=[01]
设控制器周期(即离散化周期)为 T T T 已知,则矩阵指数
( s I − A ) − 1 = [ s − 1 0 s ] − 1 = 1 s 2 [ s 1 0 s ] e A t = L − 1 ( s I − A ) − 1 = L − 1 [ 1 s 1 s 2 0 1 s ] = [ 1 t 0 1 ] F = e A T = [ 1 T 0 1 ] G = ∫ 0 T e A t d t B = [ T T 2 2 0 T ] [ 0 1 ] = [ T 2 2 T ] \begin{aligned} & (sI-A)^{-1}=\begin{bmatrix} s & -1 \\ 0 & s \end{bmatrix}^{-1} =\frac 1{s^2}\begin{bmatrix} s & 1 \\ 0 & s \end{bmatrix} \\ & \text{e}^{At}=\mathcal L^{-1}(sI-A)^{-1}=\mathcal L^{-1} \begin{bmatrix} \frac 1s & \frac 1{s^2} \\ 0 & \frac 1s \end{bmatrix} =\begin{bmatrix} 1 & t \\ 0 & 1 \end{bmatrix} \\ & F=\text{e}^{AT}=\begin{bmatrix} 1 & T \\ 0 & 1 \end{bmatrix} \\ & G=\int_0^T\text{e}^{At}\text{d}tB =\begin{bmatrix} T & \frac{T^2}2 \\ 0 & T \end{bmatrix} \begin{bmatrix} 0 \\ 1 \end{bmatrix} =\begin{bmatrix} \frac{T^2}2 \\ T \end{bmatrix} \end{aligned} (sIA)1=[s01s]1=s21[s01s]eAt=L1(sIA)1=L1[s10s21s1]=[10t1]F=eAT=[10T1]G=0TeAtdtB=[T02T2T][01]=[2T2T]
于是
x ⃗ ( n + 1 ) = F x ⃗ ( n ) + G u ( n ) = [ 1 T 0 1 ] x ⃗ ( n ) + [ T 2 2 T ] u ( n ) \begin{aligned} \vec x(n+1) =& F\vec x(n) + Gu(n) \\ =& \begin{bmatrix} 1 & T \\ 0 & 1 \end{bmatrix}\vec x(n) +\begin{bmatrix} \frac{T^2}2 \\ T \end{bmatrix}u(n) \\ \end{aligned} x (n+1)==Fx (n)+Gu(n)[10T1]x (n)+[2T2T]u(n)

u ( n ) = − K x ⃗ ( n ) = − [ k 1 k 2 ] [ x 1 x 2 ] u(n) = -K\vec x(n) = -\begin{bmatrix} k_1 & k_2 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \end{bmatrix} u(n)=Kx (n)=[k1k2][x1x2]
代入得
x ⃗ ( n + 1 ) = ( F − G K ) x ⃗ ( n ) = ( [ 1 T 0 1 ] + [ T 2 2 k 1 T 2 2 k 2 T k 1 T k 2 ] ) x ⃗ ( n ) \begin{aligned} \vec x(n+1) =& (F-GK)\vec x(n) \\ =& \left(\begin{bmatrix} 1 & T \\ 0 & 1 \end{bmatrix} +\begin{bmatrix} \frac{T^2}2k_1 & \frac{T^2}2k_2 \\ Tk_1 & Tk_2 \end{bmatrix} \right)\vec x(n) \\ \end{aligned} x (n+1)==(FGK)x (n)([10T1]+[2T2k1Tk12T2k2Tk2])x (n)
给定两个极点就可以使用比较系数法计算出 k 1 , k 2 k_1,k_2 k1,k2。除此以外还有一种便于使用计算机求解的方法
K = [ 0 ⋯ 0 1 ] [ G F G F n − 1 G ] α ( F ) K= \begin{bmatrix} 0 & \cdots & 0 & 1 \end{bmatrix} \begin{bmatrix} G & FG & F^{n-1}G \end{bmatrix}\alpha(F) K=[001][GFGFn1G]α(F)
其中 α ( x ) \alpha(x) α(x) 为给定极点的特征多项式,例如给定两个极点为 λ 1 , λ 2 \lambda_1,\lambda_2 λ1,λ2,则 α ( x ) = ( x − λ 1 ) ( x − λ 2 ) \alpha(x)=(x-\lambda_1)(x-\lambda_2) α(x)=(xλ1)(xλ2)。设给定重极点 λ 1 = λ 2 = − 5 \lambda_1=\lambda_2=-5 λ1=λ2=5,变换到离散域 z = e s T = e − 0.5 z=\text e^{sT}=\text e^{-0.5} z=esT=e0.5。仿真结果如图所示,图中 u u u 为控制量, y = x 1 y=x_1 y=x1 为状态量。
在这里插入图片描述

参考

教材[1]里有更完整的推导过程,链接[2]里有另一个混合系统控制的例子。

  1. 孙增圻. 计算机控制理论与应用. 清华大学出版社.
  2. simucpp系列教程(3)例程解析(第二部分)

附录:零阶保持器离散化

对使用状态空间描述的线性系统
x ⃗ ′ = A x ⃗ + B u y = C x ⃗ + D u \begin{array}{l} \vec x'=A\vec x+Bu \\ y=C\vec x+Du \end{array} x =Ax +Buy=Cx +Du
使用零阶保持法可以离散化成
x ⃗ ( k + 1 ) = F x ⃗ ( k ) + G u ( k ) y ( k ) = C x ⃗ ( k ) + D u ( k ) \begin{array}{l} \vec x(k+1)=F\vec x(k)+Gu(k) \\ y(k)=C\vec x(k)+Du(k) \end{array} x (k+1)=Fx (k)+Gu(k)y(k)=Cx (k)+Du(k)
其中
F = e A T , G = ∫ 0 T e A t d t B F=\text{e}^{AT},G=\int_0^T\text{e}^{At}\text{d}tB F=eAT,G=0TeAtdtB
e A T \text{e}^{AT} eAT 是矩阵指数。
推导
x ′ ( t ) = A x ( t ) + B u ( t ) x ( t ) = e A ( t − t 0 ) x ( t 0 ) + ∫ t 0 t e A ( t − τ ) B u ( τ ) d τ \begin{aligned} & x'(t)=Ax(t)+Bu(t) \\ & x(t)=\text{e}^{A(t-t_0)}x(t_0)+\int_{t_0}^t\text{e}^{A(t-\tau)}Bu(\tau)\text{d}\tau \\ \end{aligned} x(t)=Ax(t)+Bu(t)x(t)=eA(tt0)x(t0)+t0teA(tτ)Bu(τ)dτ
t 0 = k T t_0=kT t0=kT t = ( k + 1 ) T t=(k+1)T t=(k+1)T,则
x ( ( k + 1 ) T ) = e A T x ( k T ) + ∫ k T ( k + 1 ) T e A ( k T + T − τ ) B u ( τ ) d τ ∫ k T ( k + 1 ) T e A ( k T + T − τ ) B u ( τ ) d τ = t = k T + T − τ ∫ 0 T e A t B u ( k T + T − t ) d t x ( k + 1 ) = e A T x ( k ) + ∫ 0 T e A t B d t u ( k ) \begin{aligned} & x((k+1)T)=\text{e}^{AT}x(kT)+\int_{kT}^{(k+1)T}\text{e}^{A(kT+T-\tau)}Bu(\tau)\text{d}\tau \\ & \int_{kT}^{(k+1)T}\text{e}^{A(kT+T-\tau)}Bu(\tau)\text{d}\tau \xlongequal{t=kT+T-\tau}\int_0^T\text{e}^{At}Bu(kT+T-t)\text{d}t \\ & x(k+1)=\text{e}^{AT}x(k)+\int_0^T\text{e}^{At}B\text{d}tu(k) \\ \end{aligned} x((k+1)T)=eATx(kT)+kT(k+1)TeA(kT+Tτ)Bu(τ)dτkT(k+1)TeA(kT+Tτ)Bu(τ)dτt=kT+Tτ 0TeAtBu(kT+Tt)dtx(k+1)=eATx(k)+0TeAtBdtu(k)

附录:代码

计算反馈控制系数 K K K 的代码

#include <iostream>
#include "zhnmat.hpp"
using namespace zhnmat;
using namespace std;
typedef std::vector<double>  vecdble;
Mat polynomial(Mat x, vecdble lambda) {
    double order = x.row();
    if (order != x.col()) return Mat();
    Mat ans = eye(order);
    for (uint32_t i = 0; i < order; i++)
        ans *= x - lambda[i]*eye(order);
    return x;
}
int main(void) {
    double T = 0.1;
    Mat F(2, 2, vecdble{1, T, 0, 1});
    Mat G(2, 1, vecdble{T*T*0.5, T});
    Mat K(1, 2);
    K.set(0, 0, G.at(1,0));
    K.set(0, 1, (F*G).at(1,0));
    K *= polynomial(F, vecdble{-3, -3});
    cout << K << endl;
}

二阶积分器串联型系统仿真代码

#include "simucpp.hpp"
using namespace simucpp;
int main() {
    Simulator sim1;
    FUIntegrator(uint1, &sim1);
    FUIntegrator(uint2, &sim1);
    FUConstant(cnst1, &sim1);
    FUOutput(uout1, &sim1);
    sim1.connectU(cnst1, uint1);
    sim1.connectU(uint1, uint2);
    sim1.connectU(uint2, uout1);
    sim1.Initialize();
    double ctrl;
    for (uint32_t n1 = 0; n1 < 20; n1++) {
        ctrl = (3-uint2->Get_OutValue()) * 15.24;
        ctrl -= uint1->Get_OutValue() * 7.04;
        for (uint32_t i = 0; i < 100; i++) {
            cnst1->Set_OutValue(ctrl);
            sim1.Simulate_OneStep();
        }
    }
    sim1.Plot();
    return 0;
}

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

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

相关文章

Leetcode.1465 切割后面积最大的蛋糕

题目链接 Leetcode.1465 切割后面积最大的蛋糕 rating : 1445 题目描述 矩形蛋糕的高度为 h h h 且宽度为 w w w&#xff0c;给你两个整数数组 h o r i z o n t a l C u t s horizontalCuts horizontalCuts 和 v e r t i c a l C u t s verticalCuts verticalCuts&#xf…

Leetcode—66.加一【简单】

2023每日刷题&#xff08;十一&#xff09; Leetcode—66.加一 实现代码1 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* plusOne(int* digits, int digitsSize, int* returnSize){int num 0;int i 0;int arr[110] {0};// 进位标识…

Linux MMC子系统 - 2.eMMC 5.1总线协议浅析

By: Ailson Jack Date: 2023.10.27 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/161.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

Java提升技术,进阶为高级开发和架构师的路线

原文网址&#xff1a;Java提升技术&#xff0c;进阶为高级开发和架构师的路线-CSDN博客 简介 Java怎样提升技术&#xff1f;怎样进阶为高级开发和架构师&#xff1f;本文介绍靠谱的成长路线。 首先点明&#xff0c;只写业务代码是无法成长技术的。提升技术的两个方法是&…

“从部署到优化,打造高效会议管理系统“

目录 引言一、部署单机项目 - 会议OA1.1 硬件和软件环境准备1.2 检查项目1.3 系统部署1.后端部署 二、部署前后端分离项目 - SPA项目后端部署2.前端部署 总结 引言 在现代化办公环境中&#xff0c;会议是组织沟通、决策和合作的重要方式之一。为了提高会议的效率和质量&#x…

MySQL-DQL【数据查询语言】(图码结合)

目录 一.DQL的定义 二.DQL—语法 三.DQL—基础查询(SELECT.. FROM) &#x1f449;查询多个字段 &#x1f449;设置别名 &#x1f449;去除重复记录 准备工作(建表&#xff0c;添加数据&#xff09; &DQL----基本查询的案例 五.DQL—条件查询(WHERE) 5.1 语法: 5…

基于 C# 实现样式与数据分离的打印方案

对于八月份的印象&#xff0c;我发现大部分都留给了出差。而九月初出差回来&#xff0c;我便立马投入了新项目的研发工作。因此&#xff0c;无论是中秋节还是国庆节&#xff0c;在这一连串忙碌的日子里&#xff0c;无不充满着仓促的气息。王北洛说&#xff0c;“活着不就是仓促…

数字化转型系列主题:数据中台知识体系

当前&#xff0c;大部分企业不再建设从源数据采集到分析应用的烟囱式系统&#xff0c;更倾向于数据集中采集、存储&#xff0c;并应用分层建设。这种方式一方面有利于应用系统的快速部署&#xff0c;另一方面也保证了数据的集中管理与运营&#xff0c;体现数据的资产、资源属性…

主动调度是如何发生的

计算机主要处理计算、网络、存储三个方面。计算主要是 CPU 和内存的合作&#xff1b;网络和存储则多是和外部设备的合作&#xff1b;在操作外部设备的时候&#xff0c;往往需要让出 CPU&#xff0c;就像上面两段代码一样&#xff0c;选择调用 schedule() 函数。 上下文切换主要…

初识《时间复杂度和空间复杂度》

目录 前言&#xff1a; 关于数据结构与算法 1.什么是数据结构&#xff1f; 2.什么是算法&#xff1f; 3.数据结构和算法的重要性 算法效率是什么&#xff1f; 1.怎样衡量一个算法的好坏呢&#xff1f; 2.算法的复杂度是个什么&#xff1f; 时间复杂度 1.时间复杂度的概…

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin

Android Glide限定onlyRetrieveFromCache取内存缓存submit超时阻塞方式,Kotlin import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.b…

RK3568-pcie接口

pcie接口与sata接口 pcie总线pcie总线pcie控制器sata控制器nvme设备sata设备nvme协议ahci协议m-key接口b-key接口RC模式和EP模式 RC和EP分别对应主模式和从模式,普通的PCI RC主模式可以用于连接PCI-E以太网芯片或PCI-E的硬盘等外设。 RC模式使用外设一般都有LINUX驱动程序,安…

LLM系列 | 22 : Code Llama实战(下篇):本地部署、量化及GPT-4对比

引言 模型简介 依赖安装 模型inference 代码补全 4-bit版模型 代码填充 指令编码 Code Llama vs ChatGPT vs GPT4 小结 引言 青山隐隐水迢迢&#xff0c;秋尽江南草未凋。 小伙伴们好&#xff0c;我是《小窗幽记机器学习》的小编&#xff1a;卖热干面的小女孩。紧接…

36基于matlab的对分解层数和惩罚因子进行优化

基于matlab的对分解层数和惩罚因子进行优化。蚁狮优化算法优化VMD,算术优化算法优化VMD&#xff0c;遗传优化算法优化VMD&#xff0c;灰狼优化算法优化VMD&#xff0c;海洋捕食者优化算法优化VMD&#xff0c;粒子群优化VMD&#xff0c;麻雀优化算法优化VMD&#xff0c;鲸鱼优化…

如何使用 nvm-windows 这个工具来管理你电脑上的Node.js版本

nvm-windows 是一个用于管理在 Windows 上安装的多个 Node.js 版本的工具。以下是安装和使用 nvm-windows 的步骤&#xff1a; 第1步&#xff1a;下载 nvm-windows 访问 nvm-windows 的 GitHub发布页面.下载最新版本的 nvm-setup.zip 文件。 第2步&#xff1a;安装 nvm-wind…

KV STUDIO的安装与实践(一)

目录 什么是KV STUDIO&#xff1f; 如何安装KV STUDIO&#xff1f; 如何学习与使用KV STUDIO&#xff08;在现实中的应用&#xff09;&#xff1f; 应用一&#xff08;在现实生活中机器内部plc的读取与替换&#xff09; 读取 KV STUDIO实现显示器的检测&#xff01;&#…

微信小程序发货信息录入

微信小程序发货信息录入 一、发货信息录入接口 1、 用户交易后&#xff0c;默认资金将会进入冻结状态&#xff0c;开发者在发货后&#xff0c;需要在小程序平台录入相关发货信息&#xff0c;平台会将发货信息以消息的形式推送给购买的微信用户。 2、 如果你已经录入发货信息…

lossBN

still tips for learning classification and regression关于softmax的引入和作用分类问题损失函数 - MSE & Cross-entropy⭐Batch Normalization&#xff08;BN&#xff09;⭐想法&#xff1a;直接改error surface的landscape&#xff0c;把山铲平feature normalization那…

夯实c语言基础

夯实c语言基础 转义字符 • \? &#xff1a;在书写连续多个问号时使⽤&#xff0c;防⽌他们被解析成三字⺟词&#xff0c;在新的编译器上没法验证了。 • \ &#xff1a;⽤于表⽰字符常量 • \" &#xff1a;⽤于表⽰⼀个字符串内部的双引号 • \\ &#xff1a;⽤于表…

分享微信卸载重装恢复记录的3个方法!

微信是一款功能丰富、便捷实用的通信应用程序&#xff0c;为用户提供了方便、快速的即时通讯功能。无论您身在何处&#xff0c;通过微信&#xff0c;您可以轻松与家人、朋友保持紧密联系。有时候&#xff0c;为了能扩大手机内存空间&#xff0c;一些小伙伴可能会选择把微信卸载…