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