从系列:修剪和线性化
布莱恩•道格拉斯
有了对线性化的一般理解,您可能会在尝试线性化现实的非线性模型时遇到一些困难。如果你对线性化是如何实现的有更实际的理解,这些障碍是可以避免的,这就是我们在这段视频中要讲的。
不连续函数能被线性化吗?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.这与我们的手计算完全相同的结果。
完美的。所以这个软件看起来确实在修剪和线性化模型,就像我们手工做的那样。
好吧,Sim金宝appulink并没有以完全相同的方式进行线性化,我想要详细地解释一下为什么,因为理解你的工具如何在引子下工作将有助于找出正确的方式使用它们以获得最佳结果。
用手工方法,我们研究了整个端到端的微分方程并解决了部分衍生物的矩阵。但是,Simuli金宝appnk不是整个系统。相反,它分别线性化了每个块,并结合所得到的各个线性模型以获得完整的线性化模型。这很好,因为我们可以在Simulink模型中取得大量的分层模型,这对于减少到单个差分方程来说是不切实际的 - 而是仅关注每个块金宝app。所以让我们这样做是为了水箱模型。
线性块显然很容易线性化,因为它们已经是线性的了。这是它们的状态空间表示。水箱模型只有一个非线性块:平方根函数。
Simulink如金宝app何处理这个问题?我们来想一下怎么用手工来线性化它。我们对函数求导然后求出在操作条件下的斜率。在某种意义上,这正是Simulink为这个块所做的。金宝app在Simulink中,许多非线性块被分配一个雅可比矩阵;金宝app它隐藏在区块的元数据中。对于平方根函数,雅可比矩阵就是函数的导数。Sim金宝appulink用它来确定平方根方块的线性模型。
一旦所有块都是线性的,它们被组合成一个单个状态空间表示。这种方法是用于自动差异的相同想法,有时用于找到软件代码的衍生物。减少这样的模型也类似于您如何减少基于传输函数的框图,其中有关于如何处理串行块,并行,反馈等的规则。但是在引擎盖下,Simulink通过将系金宝app统作为线性分数变换制定为一个有趣的侧面,而是超出了该视频的范围。
好了,Simulink最终通过线性化每个独金宝app立的木块并将它们组合在一起得到的模型与我们手工创建的模型完全相同。它准确的原因是因为一个非线性块有一个解析推导的雅可比矩阵,所以没有通过任何形式的近似引入误差。我认为这非常棒。
这是理想情况,有一个预定义的雅可比矩阵。但是单独看块的好处是我们可以看到当我们在模型中使用其他非线性块时理想情况是如何变化的。我们不用内置的Simulink块来求平方根,假设我们写了自己金宝app的MATLAB函数块来求输入的平方根。MATLAB函数块没有赋值的雅可比矩阵因为块里面的代码可以是任意的。
那么这种情况下会发生什么呢?金宝appSimulink通过微扰块输入和任何内部状态并测量输出来近似雅可比矩阵。为了使平方根函数在4左右运行的情况更加直观,可以想象通过4.01和3.99发送数据,然后使用结果计算斜率。这是雅可比矩阵的数值逼近。这里的关键是确保扰动步骤的大小合适,以估计局部斜率。如果太大,你会得到更多的平均值,如果太小,你可能会围绕量化效应或代码中存在的高频信号进行线性化。
如果你不想依赖于雅可比矩阵的数值逼近,还有第三种方法可以让Simulink处理非线性块。金宝app你可以决定如何线性化一个非线性块,然后把那个线性化分配给块。您可以通过右键单击并选择线性分析,然后指定所选的块线性化。例如,我可以强制我的Square Root函数来线性化到我选择的一些任意状态空间模型。现在,当我线性化块时,Simulink不会尝试数值估计Jacob金宝appian;它只是使用指定的线性化。并且你可以看到它,事实上,即使我给出的模型也表现得像平方根函数一样。因此,您可以使用此方法来强制执行您想要的线性化,在数值扰动可能不会产生您正在寻找的结果。我们将达到一个例子。
这就是Simulink处理雅可比线性化的方法解析的,数金宝app值的,赋值的,或者在块层面赋值的。
我提出所有这些方法的原因是,当我们讨论可微分模型(或定义斜率的模型)时它们会很有帮助我们讨论不连续系统的线性化。如果它不可微,那么求这一点的斜率就没有意义了,对吧?这要看情况而定。
让我们看看旋转摩擦,它存在于旋转电机中。当电机不旋转时,需要一个分离力矩来克服摩擦力的粘附力矩,使其运动。当电机转速较低时,Stribeck摩擦表现为非线性,而当电机转速较高时,粘性摩擦的线性特性则占主导地位。因为摩擦力和运动相反,所以摩擦力和运动方向相反。
现在让我们考虑在0转/分左右操作电机。例如,您想要构建一个可以在两个方向以非常低的速度旋转的伺服系统。在这个操作点使用线性模型设计控制器是否有意义?
显然,摩擦扭矩在操作点处不连续,因此我们需要仔细考虑线性化。
让我们以最好的情况为例,与整体操作扭矩相比,分离扭矩非常小。马达里仍然有摩擦,但几乎看不出来。在这种情况下,摩擦的行为可以合理地近似为一条直线,或者等于粘性摩擦的增益。然而,我们知道,这个函数在0 RPM时是不可微的即使不连续点非常小,所以我们不能用雅可比矩阵得到一个线性模型。如果我们试图在Simulink中以0 RPM左右线性化这个块,它将抛出一个错误,说明这个块产生非有限状态金宝app空间矩阵。为了解决这个问题,我们可以利用我们的知识,即与整体动力学相比,在工作点上的不连续是微不足道的,并为这个块指定一个指定的线性化。
如果我们考虑最坏的情况,当分离力矩很大时,我们还能线性化这个系统吗?我们可以为这个块指定一个特定的线性化,我们总是可以这样做;然而,我们可以合理地得出结论,一个线性模型将不能充分捕捉电机的动力在0 RPM左右,所以创建一个没有意义。事实上,即使一个块在工作点是可微的,它也可能是高度非线性的,任何线性模型也将无法捕获在工作点上的相关动态。即线性模型的有效区域小于运算区域。
这就是我之前所说的如果我们不完全理解我们要线性化的系统的本质我们会在线性化过程中遇到一些困难。仅仅因为一个系统是不可微的,并不意味着你不能给它一个好的线性模型。但另一方面,一个高度非线性的可微系统的线性模型可能会排除一些非常重要的动力学。
最后我想快速讲一下微分线性化和线性化的区别,微分线性化是我们在这集视频中讲过的,线性化是通过对系统拟合一个线性模型。我的意思是我们也可以使用系统辨识和频率响应方法来找到一个线性模型而不需要解雅可比矩阵。简单的描述是,我们将一个已知的信号注入系统,测量输出,然后得出一个具有类似行为的线性模型。
我不想让你们认为线性化只有一种方法,但我不打算在这个视频中讨论这些拟合方法。我将把这些话题留到以后的视频中。
如果你不想错过下一个Tech Talk视频,别忘了订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我也涵盖了更多的控制理论主题。谢谢收看。下次见。
您还可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。