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