从系列中:修剪和线性化
布莱恩•道格拉斯
线性化的一个大致的了解,你可能会想现实的线性化非线性模型时,会遇到一些障碍。可避免这些碰壁,如果你有一个如何线性化来实现更实际的了解,而这正是我们将在本视频覆盖。
不连续函数可以线性化吗?Simulink如金宝app何将层次模型线性化?你应该寻找什么来决定你的模型是否可以线性化?
看这个视频找出答案。
从上个视频中,我们对线性化的基本概念有了很好的理解。在最基本的层面上,我们考虑的是一个函数在稳态运行点的一阶偏导数并假设这个斜率是非线性函数的一个很好的近似只要我们保持接近运行点。在水箱的例子中,我们用手求解偏导数,然后用它们来建立线性模型。但是这样做对于任意的系统是不切实际的,因为分析推导是不可能完成的,或者至少是一项耗时的工作。在这些情况下,我们可以使用MATLAB和Simulink中的建模和线性化工具。金宝app但是,如果我们只是在Simulink中盲目地开始线性化模型,并且对线性化有一个大致的了解,那么我们就会遇到一些障碍——如金宝app果我们对如何实现线性化有一个更实际的了解,那么这些障碍是可以避免的。这就是我们这节课要讲的。我是布莱恩,欢迎来到MATLAB技术讲座。
首先,让我们重新讨论水箱的线性化示例。作业点Hbar = 4。这导致了稳态电压为2a/b,以及Hdot的线性近似,作为H和v的函数。现在,让我们在Simulink中打开水箱的例子,看看是否可以生成相同的线性模型。金宝app对于默认的a、b和a值,我们期望稳态电压为0.8V,线性模型为Hdot = -0.025 H + 0.25 V。
我们将分两部分来做:首先,我们将在工作点H bar=4处对系统进行微调,然后,我们将在稳态条件下进行线性化。
为了平衡系统,我们需要找到输入电压使水的高度精确地保持在4米,或4英尺,或4秒,或任何单位。
我们将使用Simulink控制设计中的微调功能进行微调。金宝app在这里,我们选择我们想要确定一个特定值的状态和输入,然后让软件决定自由状态的值和使其成为稳定状态的自由输入。我将把期望的高度设置为4,并让软件计算必要的输入电压。我们发现它实际上是0。8v。这很好。
修剪工具的好处是,它可以很好地处理具有多个状态和输入的复杂系统。要查看实际效果,请查看我在下面的描述中链接到的飞机修剪示例。
好了,现在我们有了一个修剪过的系统,我们可以在我们刚刚创建的操作点附近对它进行线性化得到模型的线性状态空间表示。A矩阵是-0。025 B矩阵是0。25。因为我们模型的输出也是状态变量,所以C矩阵是1,因为系统中没有前馈,所以D矩阵是0。这和我们手工计算的结果完全一样。
很 完美。所以软件看起来像是用我们手工做的方法来修剪和线性化模型。
好吧,Sim金宝appulink并没有以完全相同的方式来处理线性化,我想详细解释一下原因,因为了解你的工具在引擎盖下是如何工作的,对于找出正确的方法来使用它们以获得最佳效果会有很大的帮助。
用手方法,我们研究了整个端到端微分方程并解出了一个偏导数矩阵。但是,Simuli金宝appnk并没有将整个系统作为一个整体来看待。相反,它将每个块分别线性化,并将得到的单个线性模型组合在一起,从而得到一个完全线性化的模型。这样做很好,因为我们可以在simulink中采用大型的分层模型—将模型简化为单个微分方程是不切实际的—而只关注每个单独的块。金宝app我们来做水箱模型。
线性块显然很容易线性化,因为它们已经是线性的了。下面是它们的状态空间表示。水箱模型只有一个非线性块:平方根函数。
Simulink如金宝app何处理这个问题?好吧,让我们考虑一下如何手工线性化。我们取函数的导数,求出操作条件下的斜率。在某种意义上,这正是Simulink为这个块所做的。Simulink中的许多非线性块被赋予了一个Jacobian;它隐藏在块的元数据中。在平方根函数的情况下,雅可比矩阵就是函数的导数。所以Simulink用它来确定平方根块的线性模型。
一旦所有的块被线性化,它们就组合成一个单一的状态空间表示。这种方法与自动微分中使用的思想相同,有时也用于寻找软件代码的微分。减少这样的模型也类似于减少基于传递函数的框图,其中有关于如何处理串行块、并行、反馈等的规则。但在幕后,Simulink通过将系统表示金宝app为线性分式转换来实现这一点,这是一个有趣的次要主题,但超出了本视频的范围。
Simulink最终通过线性化每一个boc金宝appk并将它们组合起来得到的模型与我们手工创建的模型完全相同。它准确的原因是因为一个非线性块有一个解析推导的雅可比矩阵,所以在任何近似中都没有引入误差。我认为这非常棒。
这是一个理想情况,有一个预先定义的雅可比矩阵。但是单独观察块的好处是,当我们在模型中使用其他非线性块时,我们可以看到理想情况是如何变化的。我们没有使用内置的Simulink块作为平方根,而是编写了自金宝app己的MATLAB函数块,它接受输入的平方根。MATLAB函数块没有赋给它一个雅可比矩阵因为它里面的东西可以是任何代码。
那么在这种情况下会发生什么呢?金宝appSimulink通过稍微扰动输入块和任何内部状态并测量输出来近似雅可比矩阵。为了直观地表示在4附近运行的平方根函数,假设发送了4.01和3.99,然后使用结果来计算斜率。这是雅可比矩阵的数值近似值。这里的关键是确定摄动步长是估计局部斜率的适当大小。如果太大,你会在这个区域得到更多的平均值,如果太小,你可能会在量化效应或任何存在于你的代码中的高频信号周围线性化。
如果不想依赖Jacobian的数值逼近,Simulink还有第三种方法可以处理非线性块。您可以决定如何使非线性块线性化,然后将该线性化指定给块。要执行此操作,请单击鼠标右键并选择“线性分析”,然后指定选定金宝app的块线性化。例如,我可以强制平方根函数线性化到我选择的任意状态空间模型。现在,当我将块线性化时,Simulink不会尝试用数值方法估计Jacobian;它只使用指定的线性化。你可以看到,事实上,它做到了这一点,即使我给它的模型的行为不像平方根函数。因此,在数值扰动可能无法产生所需结果的情况下,可以使用此方法金宝app严格执行所需的线性化。我们稍后会举一个例子。
因此,这些都是接近的Simulink雅克比线性方式:分金宝app析,数值和assignedly,或在块级分配。
我向你们介绍所有这些方法的原因是,当我们经过可微模型(或具有定义斜率的模型)并讨论不连续系统的线性化时,它会很有帮助。如果它是不可微的,那么在那个点上找到斜率就没什么意义了,对吧?嗯,这要看情况而定。
让我们来看看旋转摩擦,它存在于旋转马达中。当电机不旋转时,需要一个分离转矩来克服摩擦的粘滞转矩并使其移动。低速时,存在Stribeck摩擦的非线性行为,随着电机转速的提高,粘滞摩擦的线性特性占主导地位。因为摩擦力与运动相反,所以在负方向上正好相反。
现在让我们考虑在每分钟0转左右操作马达。例如,您想要构建一个可以在非常低的速度下在两个方向上旋转的伺服系统。在这个操作点上用线性模型设计控制器有意义吗?
显然,摩擦力矩在工作点是不连续的,所以我们需要仔细考虑线性化。
让我们以最好的情况为例,分离扭矩相对于整个操作扭矩来说非常小。马达仍有摩擦,但不太明显。在这种情况下,摩擦的行为可以合理地近似为一条直线,或者增益等于粘性摩擦。然而,正如我们所知,这个函数在0 RPM时是不可微的即使不连续非常小,所以我们不能用雅可比矩阵得到线性模型。如果我们试图在Simulink中在0 RPM左右线性化这个块,它会抛出一个错误,说明这个块产生了非有限状金宝app态空间矩阵。为了解决这个问题,我们可以利用我们的知识,在操作点的不连续是无关紧要的,与整体动力学相比,只是分配这个块一个指定的线性化。
如果我们考虑最坏的情况,分离力矩很大,我们还能线性化这个系统吗?我们可以为这个块指定一个特定的线性化——我们总是可以这样做;然而,我们可以合理地得出结论,线性模型不能充分捕捉0 RPM左右的马达动态,因此创建一个这样的模型是没有意义的。事实上,即使一个块在作用点上是可微的,它也可能是高度非线性的,任何线性模型都无法在作用点上捕捉到相关的动态。也就是说,线性模型的有效性区域小于操作区域。
这就是我之前说的我们在线性化过程中会遇到一些障碍的意思如果我们不完全理解我们所线性化的系统的本质。仅仅因为一个系统是不可微的,并不意味着你不能给它一个好的线性模型。但另一方面,一个高度非线性的可微系统的线性模型可能会排除一些真正重要的动力学。
我想快速提的就是通过差异化线性化,这是我们在这段视频中谈到,通过拟合到系统的线性模型,线性化之间的差异。我的意思是,我们还可以利用系统识别和频率响应的方法来找到一个线性模型,而无需解决的雅可比。这样做的简要描述的是,我们注入一个已知信号到系统中,测量输出,然后拿出具有类似行为的线性模型。
我不想让你离开的思维,只有一个办法,以线性化,但我不打算进入这个视频这些配件的方法。我将离开这些主题为今后的视频。
如果你不想错过下技术讲座视频,别忘了订阅此频道。另外,如果你想看看我的频道,控制系统的讲座,我覆盖更多的控制理论主题那里。感谢收看。我会看到你下一次。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站表现。其他MathWorks国家站点不适合来自您所在位置的访问。
本网站使用Cookies来改善您的用户体验,个性化的内容和广告,并分析网站流量。通过继续使用本网站,您同意我们使用Cookie。请参阅我们的隐私政策要了解更多关于cookie和如何更改设置。