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