从系列:修剪和线性化
布莱恩道格拉斯
有了对线性化的一般理解,您可能会在尝试线性化现实的非线性模型时遇到一些困难。如果你对线性化是如何实现的有更实际的理解,这些障碍是可以避免的,这就是我们在这段视频中要讲的。
不连续功能可以线性化吗?Simulink如金宝app何线性化分层模型?您应该寻找什么来确定您的模型是否可以线性化?
观看此视频以找出答案。
从最后一个视频中,我们对线性化的潜在概念有了很好的理解。At the most basic level, we’re looking at the first order partial derivatives of a function at a steady state operating point and making the assumption that that slope is a good approximation of the nonlinear function as long as we stay close to the operating point. In the water tank example, we solved the partial derivatives by hand, and then used them to build a linear model. But doing this is impractical for arbitrary systems, because analytical derivation can be impossible to accomplish or, at the very least, a time-consuming activity. In those cases, we can turn to modeling and linearization tools within MATLAB and Simulink. However, if we just blindly start linearizing models within Simulink with a general understanding of linearization we’re going to hit a few snags—snags that can be avoided if we have a more practical understanding of how linearization is accomplished. And that’s what we’ll cover in this video. I’m Brian, and welcome to a MATLAB Tech Talk.
首先,让我们重新审视水箱示例的线性化。The operating point was Hbar = 4. This resulted in a steady state voltage of 2a/b and the linear approximation of Hdot as this function of H and V. Now, let’s open the water tank example in Simulink and see if we can generate the same linear model. With the default a, b, and A values, we’re expecting the steady state voltage to be 0.8V and the linear model to be Hdot = -0.025 H + 0.25 V.
我们将在两部分中执行此操作:首先,我们将在操作点H Bar = 4中修剪系统,而第二个部分,我们将在该稳态状态下线性化。
为了调整系统,我们需要找到输入电压使水的高度恰好保持在4米,或4英尺,或4秒差距,或任何单位。
我们将在Simulink控制设计中使用修剪功能来修剪。金宝app在这里,我们选择要修复特定值的状态和输入,然后让软件确定使其稳定状态的自由状态和自由输入的值。我将所需的高度设置为4,让软件计算必要的输入电压。我们发现它实际上是0.8 V.所以这很好。
修剪工具的好处是,它可以很好地处理具有多种状态和输入的复杂系统。要查看这个操作,请查看我在下面的描述中链接到的飞机微调示例。
好的,现在我们有一个修剪系统,我们可以在我们刚刚创建的操作点围绕我们的操作点线性化并获得模型的线性状态空间表示。矩阵为-0.025,B矩阵为0.25。由于我们的模型的输出也是状态变量,因此C矩阵为1,并且由于该系统中没有前馈,而D矩阵为0.这与我们的手计算完全相同的结果。
完美。因此,该软件似乎可以以与手用手所做的方式进行修剪和线性化。
Well, Simulink didn’t approach linearization in exactly the same way, and I want to explain why in some detail because understanding how your tools work under the hood will go a long way to figuring out the proper way to use them to get the best result.
用手工方法,我们研究了整个端到端的微分方程并解决了部分衍生物的矩阵。但是,Simuli金宝appnk不是整个系统。相反,它分别线性化了每个块,并结合所得到的各个线性模型以获得完整的线性化模型。这很好,因为我们可以在Simulink模型中取得大量的分层模型,这对于减少到单个差分方程来说是不切实际的 - 而是仅关注每个块金宝app。所以让我们这样做是为了水箱模型。
线性块显然很容易线性化,因为它们已经是线性的。这里是每个人的状态空间表示。水箱模型仅具有一个非线性块:方形根功能。
Simulink如金宝app何处理这个问题?我们来想一下怎么用手工来线性化它。我们对函数求导然后求出在操作条件下的斜率。在某种意义上,这正是Simulink为这个块所做的。金宝app在Simulink中,许多非线性块被分配一个雅可比矩阵;金宝app它隐藏在区块的元数据中。对于平方根函数,雅可比矩阵就是函数的导数。Sim金宝appulink用它来确定平方根方块的线性模型。
一旦所有块都是线性的,它们被组合成一个单个状态空间表示。这种方法是用于自动差异的相同想法,有时用于找到软件代码的衍生物。减少这样的模型也类似于您如何减少基于传输函数的框图,其中有关于如何处理串行块,并行,反馈等的规则。但是在引擎盖下,Simulink通过将系金宝app统作为线性分数变换制定为一个有趣的侧面,而是超出了该视频的范围。
好吧,模拟模拟通过线性化,通过线性化,并将金宝app它们组合与手动创建的模型完全相同。它确切的原因是因为一个非线性块有一个分析衍生的雅比诺,因此通过任何类型的近似都没有引入错误。我想,这非常棒。
好的,这是理想的案例,具有预定义的雅各比。但是,关于单独查看块的很好的部分是,我们可以在我们的模型中使用其他非线性块时,我们可以看到理想情况如何变化。而不是使用Square Root的内置Simulink块,让金宝app我们假设我们写了自己的MATLAB功能块,它采用输入的平方根。MATLAB功能块没有分配给它的jacobian,因为块内部可以是任何任意代码。
那么在这种情况下会发生什么?金宝appSimulink通过略微扰乱块输入和任何内部状态并测量输出来近似于曲轴近似值。为了可视化它为40左右运行的平方根函数,想象通过4.01和3.99,然后使用结果计算斜率。这是雅可比的数值近似。这里的关键是确保扰动步骤是估计本地斜率的适当大小。太大了,您在该地区获得了更多的平均值,而且太小,您可能会在量化效果或代码中存在的任何高频信号进行线性化。
如果你不想依赖于雅可比矩阵的数值逼近,还有第三种方法可以让Simulink处理非线性块。金宝app你可以决定如何线性化一个非线性块,然后把那个线性化分配给块。您可以通过右键单击并选择线性分析,然后指定所选的块线性化。例如,我可以强迫我的平方根函数线性化到我选择的任意状态空间模型。当我线性化块时,Simulink不会用数值估计雅可比矩阵;金宝app它只需要使用指定的线性化。你可以看到,事实上,它做到了这一点尽管我给出的模型并不像平方根函数。所以你可以用这个方法来加强你想要的线性化在数值扰动可能不会产生你想要的结果的情况下。我们稍后会讲到一个例子。
这就是Simulink处理雅可比线性化的方法解析的,数金宝app值的,赋值的,或者在块层面赋值的。
我提出所有这些方法的原因是,当我们讨论可微分模型(或定义斜率的模型)时它们会很有帮助我们讨论不连续系统的线性化。如果它不可微,那么求这一点的斜率就没有意义了,对吧?这要看情况而定。
让我们看一下旋转电动机内的旋转摩擦。当电动机没有旋转时,需要克服摩擦的粘性扭矩并且刚刚移动的断裂扭矩。在低速时,有摩擦摩擦的非线性行为,然后随着电动机升温,粘性摩擦的线性性质变得优势。并且由于摩擦反对运动,因此在负方向上确切地相反。
现在让我们考虑在0转/分左右操作电机。例如,您想要构建一个可以在两个方向以非常低的速度旋转的伺服系统。在这个操作点使用线性模型设计控制器是否有意义?
显然,摩擦扭矩在操作点处不连续,因此我们需要仔细考虑线性化。
让我们采取最佳情况,与整体操作扭矩相比,断裂扭矩真的很小。电机仍然存在摩擦,但它几乎不明显。在这种情况下,摩擦的行为可以合理地近似为直线,或者增加到仅仅是粘性摩擦的增益。然而,正如我们所知道的,即使不连续性真的很小,这个功能也不是0RPM的差异,所以我们无法使用雅匹碧碧的方式获得线性模型。如果我们尝试在Simulink中围绕0 RPM左右线性化,则会抛出错误,指出该块产生非小型状态空间矩阵。金宝app为了解决这个问题,我们可以知道与整体动态相比,操作点的不连续性是微不足道的,并且只要分配此块指定的线性化。
如果我们考虑最坏的情况,当分离力矩很大时,我们还能线性化这个系统吗?我们可以为这个块指定一个特定的线性化,我们总是可以这样做;然而,我们可以合理地得出结论,一个线性模型将不能充分捕捉电机的动力在0 RPM左右,所以创建一个没有意义。事实上,即使一个块在工作点是可微的,它也可能是高度非线性的,任何线性模型也将无法捕获在工作点上的相关动态。即线性模型的有效区域小于运算区域。
这就是我之前所说的如果我们不完全理解我们要线性化的系统的本质我们会在线性化过程中遇到一些困难。仅仅因为一个系统是不可微的,并不意味着你不能给它一个好的线性模型。但另一方面,一个高度非线性的可微系统的线性模型可能会排除一些非常重要的动力学。
最后我想快速讲一下微分线性化和线性化的区别,微分线性化是我们在这集视频中讲过的,线性化是通过对系统拟合一个线性模型。我的意思是我们也可以使用系统辨识和频率响应方法来找到一个线性模型而不需要解雅可比矩阵。简单的描述是,我们将一个已知的信号注入系统,测量输出,然后得出一个具有类似行为的线性模型。
我不想让你们认为线性化只有一种方法,但我不打算在这个视频中讨论这些拟合方法。我将把这些话题留到以后的视频中。
如果你不想错过下一个Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。谢谢收看。下次见。