浅谈线性化

浅谈线性化

原文:浅谈线性化 - 知乎 (zhihu.com)

All comments and opinions expressed on Zhihu are mine alone and do not necessarily reflect those of my employers, past or present.

本文内容所有内容仅代表本人观点,和Mathworks无关


 

(这里所说的线性化,包括下面会用到的"Exact Linearization", 都是指基于一阶泰勒展开的线性化近似,而不是基于微分几何的全局线性化或者输出反馈线性化。)

1 为什么要探讨线性化?

很多人看到这个题目,或许第一感觉会是:“为什么要研究线性化?线性化不就是一阶泰勒展开吗?这再简单不过了,用小学数学就好啦!”

在理论上,这一点也没错。比如我们要在原点线性化如下的非线性模型,相信大多数人不假思索的就能告诉我:线性化的结果是 y = u


既然如此,我们为什么还要探讨线性化呢? 答案很简单,上面一个例子是理论上的,也就是经过很大程度上简化了的,几乎完美的。那么实际上,工程中需要线性化的问题是什么样的呢?

看看下面的例子,假如有这样一个遥控飞机的模型。工程师现在想把控制器参数优化一下。为此,他需要线性化从飞机控制器的输入到导航控制器的输入之间这个可能含有几千个模块,几万个信号的子系统。很显然,想要解析的泰勒展开这样一个模型,在实际中是相当费时费力的。


 

那么,我们来看看难点都在哪吧:

1) 没有非线性方程:

理论上,动态系统总是可以用光滑的ODE来建模。而实际上,在工程应用中,系统往往是用框图来搭建的,比如用Simulink等软件。 用框图来建模有非常多的好处,比如可以方便的模块化,通过观察某个具体的信号值来debug, 还有其他的好处就不一一列举了。但是像这样复杂的框图模型是很难等价的转化成一组非线性方程组的。甚至有些模块,根本就不存在解析表达式。所以,很难对一个非线性方程去求偏导数来获得泰勒一阶展开项。

2) 不光滑:

有些模块或许存在解析数学表达式,但是根本不可导;有些可能存在大量的奇异点;有些甚至导数无从定义,比如enabled subsystem, triggered subsystem等。

3)多重采样时间:

在很多实际模型里面,有些模块是连续的,例如积分器。有些模块是离散的,采样时间可以是0.1秒,可以是10秒,甚至可以是无穷大,比如constant block。那么,最后线性化出来的系统到底应该是连续的,还是离散的?

4) 牵一发而动全局:

假设,在最理想的情况下:我们真的把这个模型对应的非线性方程组表示出来了, 并且最终验证了模型的准确性,然后成功的进行了线性化。可是,第二天模型的作者表示:”我把某几个子系统里的几条信号删掉了,然后把其它几条信号的连接方式重新设计了一下,你再帮我泰勒展开一下吧“。很不幸,这很大程度上意味着我们之前的解析方程组被彻底改变了,所有的工作需要重头在来过。这样的分析方式在实际的工程开发中是很不现实的,因为时间成本太高。

2 数值扰动

既然解析方法不行,那么应该怎么做呢?一个比较传统而且有效的方法是数值扰动。我们还是来看看第一个例子。

用数值扰动的方法,我们可以在输入端输入一个常数,比如说du = 0.1。 然后, 我们测量输出信号,发现 dy = 0.0998, 两者相除,我们得到了一个基于数值线性化的结果

y = 0.998*u

如果用更小的du,事实上我们可以得到更精确的结果。

现在这个方法看起来比解析方法好用了很多。在某种程度上,它的思想其实就是把整个系统当成是一个黑箱,通过输入输出来进行辨识。事实上,对于比较小和比较简单的模型,数值扰动的效果都还是不错的。

那么,它有什么问题呢?看几个例子就能明白了。

2. 1 延时的处理

我们来看看下面这个例子:

在“黑箱”中,有一个隐藏的很深的延时模块。在这种情况下,我们给这个系统提供扰动输入,然后去测量输出的时候,会发现输出信号过了很久都没有发生变化。由此,我们很有可能会错误的把这个系统线性化成一个 0 增益! 当然了,如果事先能知道其中有一个这样的Delay block,是可以采取一些措施来进行更好的辨识的。但即使如此,自动控制原理告诉我们,在频域上逼近一个Delay Block的一个很好的方式是用Pade Approximation。 但是这种逼近用数值扰动是很难做到的,特别是对于复杂的,含有多个具有不同时间长度的延时环节的系统。

现在,你也许已经可以看出此处存在的一个矛盾: 数值扰动是把整个模型当成一个黑箱,不需要知道黑箱里面的信息。但是我们实际上是知道这个黑箱里所有模块的具体情况的。可是这些信息在数值扰动的过程中没法有效的利用上。

2.2 一些特殊的模块

再看看下面这个例子


假如我们用数值扰动来线性化这个模型,那么我们会遇到两个不同的情况:1)扰动的足够小,我们得到的是一个 0 增益的线性化结果。2)扰动信号大到一定的程度,我们会得到一个线性的关系。

那么,哪个结果是对的呢?答案是:都对,也都不对。这取决于用户的具体问题。如果用户故意用这样一组quantizer, 目的就是想分析在一个很小的范围内此模型的动态。在此情况下那么1)是所期望的。还有一种可能,就是用户本身是不想用Quantizer的,但是在用数字电路实现某个部件的时候,不得已的让一个本来应该是线性增益的关系变成了这样的Quantization的结果。那么在这种情况,2)是用户所期望的。

对于这样一个特殊的模块,我们的确可以通过调整干扰信号的大小来得到不同的结果。但是假设有无数多个类似这样的模块存在于某个模型中,有些模块是属于情况1)的,有些是属于情况2)的,那么整个基于数值扰动的线性化结果就无法如用户所期望的了。

Simulink Control Design工具箱和Block-by-Block方法

Simulink Control Design 工具箱的一大特点就是它提供了Block-by-Block的线性化方法。这个方法有时也叫Exact Linearization (不同于基于微分几何的全局线性化)。简单来讲,在线性化的过程中,每个模块会先被线性化,算出各自的Jacobian矩阵。然后由Simulink Control Design工具箱把这些信息有效的整合在一起(这是一个非常复杂的过程),从而计算出整个模型的线性化结果。

在这个例子中,

线性化通路上有3个模块,他们的Jacobian分别是 cos(0) = 1, n阶的pade approximation的状态空间表达式,和1. 那么对于这个简单的系统而言,整个线性化的结果就是这三个线性系统的级联。

在第二个例子中

用户可以打开Quantizer的窗口,然后

把 Treat as gain when linearizing 的选项打上勾,这样就会使得这个模块被线性化成一个线性增益。

Simulink Control Design工具箱还带有各种高级的功能。例如,对于一些很难线性化的模块,用户可以自己配置此模块的线性化结果,用于整个模型或者子系统的线性化。

更多的内容请参考Simulink Control Design的官方文档:

Simulink Control Design Documentation

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

视频汇聚EasyCVR视频监控云平台对接GA/T 1400视图库对象和对象集合XMLSchema描述

GA/T 1400协议主要应用于公安系统的视频图像信息应用系统,如警务综合平台、治安防控系统、交通管理系统等。在城市的治安监控、交通管理、案件侦查等方面,GA/T 1400协议都发挥着重要作用。 以视频汇聚EasyCVR视频监控资源管理平台为例,该平台…

探索UWB模块的多功能应用——UWB技术赋能智慧生活

超宽带(Ultra-Wideband, UWB)技术,凭借其高精度、低功耗和强抗干扰能力,正在成为智能家居领域的一项关键技术。UWB模块的应用不仅提高了智能家居设备的性能,还为家庭安全、设备管理和用户体验带来了显著的改善。 UWB模…

java基础-chapter15(io流)

io流:存储和读取数据的解决方案 I:input O:output io流的作用:用于读写数据(本地文件,网络) io流按照流向可以分为: 输出流:程序->文件 输入流:文件->程序 io流按照操作文件…

Qt Creator(Qt 6.6)拷贝一行

Edit - Preference - Environment: 可看到,拷贝一行的快捷键是: ctrl Ins

使用KEPServer连接欧姆龙PLC获取对应标签数据(标签值类型改为字符串型)

1.创建通道(通道),(选择对应的驱动,跟当前型号PLC型号对应)。 2.创建设备,(填入IP地址以及欧姆龙的默认端口号:44818) 3.创建对应的标签。这里关键讲诉下字…

医院该如何应对网络安全?

在线医生咨询受到很多人的关注,互联网医疗行业的未来发展空间巨大,但随着医院信息化建设高速发展 医院积累了大量的患者基本信息、化验结果、电子处方、生产数据和运营信息等数据 这些数据涉及公民隐私、医院运作和发展等多因素,医疗行业办…

[C/C++]_[初级]_[在Windows平台上导出DLL函数接口的一些疑问]

场景 最近看了《COM本质论》里关于如何设计基于抽象基类作为二进制接口,把编译器和链接器的实现隐藏在这个二进制接口中,从而使用该DLL时不需要重新编译。在编译出C接口时,发现接口名直接是函数名,比如BindNativePort,怎么不是_BindNativePort?说明 VC++导出的函数默认是使…

Notepad++ 常用

File Edit search view Encoding Language Settings Tools Macro Run Plugins Window 文件 编辑 搜索 视图 编码 语言 设置 工具 宏 运行 插件 窗口 快捷方式 定位行 :CTRL g查找: CTRL F替换&am…

精准检测,安全无忧:安全阀检测实践指南

安全阀作为一种重要的安全装置,在各类工业系统和设备中发挥着举足轻重的作用。 它通过自动控制内部压力,有效防止因压力过高而引发的设备损坏和事故风险,因此,对安全阀进行定期检测,确保其性能完好、工作可靠&#xf…

Ubuntu安装GCC编译器

GCC编译器安装 GCC编译器安装切换软件源(换成国内的服务器)1 、创建一个文本文档并命名为“sources.list”2 、复制软件源列表清华源:阿里源:3 、把修改之后的.list 文件覆盖原有的文件4 、更新软件列表5 、安装6 、检查是否安装成功7、GCC 编译器:GCC编译器安装 这里演示…

HackTheBox-Machines--Nibbles

Nibbles 测试过程 1 信息收集 NMAP 80 端口 网站出了打印出“Hello world!”外,无其他可利用信息,但是查看网页源代码时,发现存在一个 /nibbleblog 文件夹 检查了 http://10.129.140.63/nibbleblog/ ,发现了 /index.p…

数据库开发-MySQL01

目录 前言 1. MySQL概述 1.1 安装 1.1.1 版本 1.1.2 安装 1.1.3 连接 1.1.4 企业使用方式(了解) 1.2 数据模型 1.3 SQL简介 1.3.1 SQL通用语法 1.3.2 分类 2. 数据库设计-DDL 2.1 项目开发流程 2.2 数据库操作 2.2.1 查询数据库 2.2.2 创建数据库 2.2.3 使用数…

开放式耳机怎么选?2024五款火爆全网品牌力荐!

​耳机如今已是生活必备品,但传统入耳式耳机长时间佩戴容易让耳朵受压、甚至引发健康问题。为了解决这些烦恼,开放式耳机应运而生。它不用塞进耳朵,不仅避免了耳道压力,还减少了耳道感染的风险,让人能尽情享受音乐。现…

Java18+ springboot+mysql +Thymeleaf 技术架构开发的全套同城服务家政上门系统源码(APP用户端+APP服务端+PC管理端)

Java springbootmysql Thymeleaf 技术架构开发的全套同城服务家政上门系统源码(APP用户端APP服务端PC管理端) 家政上门预约系统:该系统综合运用springboot、java1.8、vue移动支付、微信授权登录等技术,由用户小程序、站长小程序、…

C# try catch异常捕获

异常捕获 执行过程:try中的代码没有出现异常,则catch里面不会自行,如果try中代码出现异常,则后面的代码都不执行,直接跳到catch中的代码执行。 // try catch 可以捕获多个错误, try...catch...catch.... …

透明度技术在AI去衣中的双刃剑作用

引言: 在当今这个数字化时代,人工智能(AI)已经成为我们生活中不可或缺的一部分。它不仅改变了我们的工作方式,还影响了我们的娱乐和社交活动。然而,随着AI技术的不断发展,一些伦理问题也逐渐浮出…

高并发项目-分布式Session解决方案

分布式Session解决方案 1.保存Session,进入商品列表页面 1.保存Session 1.编写工具类 1.MD5Util.java package com.sxs.seckill.utils;import org.apache.commons.codec.digest.DigestUtils;/*** Description: MD5加密工具类** Author sun* Create 2024/5/5 14…

【漏洞复现】WordPress Country State City Dropdown CF7插件 SQL注入漏洞(CVE-2024-3495)

0x01 产品简介 Country State City Dropdown CF7插件是一个功能强大、易于使用的 WordPress 插件,它为用户在联系表单中提供国家.州/省和城市的三级下拉菜单功能,帮助用户更准确地填写地区信息。同时,插件的团队和支持也非常出色&#xff0c…

启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】

资料: https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 装VM。 装ubuntu20.04 desktop.iso系统。 装vm工具: sudo apt update sudo dpkg --configure -a sudo apt-get autoremove o…

热敏电阻的设计

热敏电阻(NTC)的作用:抑制开机时的浪涌电流。防止开机瞬间产生的浪涌电流损坏后面的元件。 取值依据:根据对开机的脉冲电流(浪涌电流)小于多少A? 由,这个U是指最大输入电压,I为要求的浪涌电流。 NTC是负温度系数的热…