裁剪和线性化,第1部分:什么是线性化?
从系列中:裁剪和线性化
布莱恩•道格拉斯
为什么要经历线性化模型的麻烦呢?用理查德·费曼的话来说,这是因为我们知道如何求解线性系统。有了线性模型,我们可以更容易地设计控制器、评估稳定性和了解系统动态。
本视频介绍了线性化的概念,并涵盖了一些主题,这些主题将帮助你理解线性化是如何使用的,以及为什么它是有用的。
本视频还介绍了工作点以及调整系统使工作点达到平衡的过程。
最后,我们通过一个雅可比线性化的例子,通过观察一个系统的一阶偏导数。
在这个视频中,我将介绍线性化的概念,并介绍一些主题,这些主题将帮助你理解线性化是如何使用的,以及为什么它是有用的。考虑一个物理系统,它被建模为一个微分方程,形式为xdot是x和u的函数。这意味着系统如何随时间变化,取决于系统的当前状态,以及系统的外部输入,这可能是外力,扭矩,能量,等等。通常这种表示是非线性的,因为所有实际系统本质上都是非线性的。问题是,我们能否找到一个合适的系统状态和外部输入的线性定常组合,在某种有限意义上产生与非线性动力学相似的结果?也就是说,我们能否将x和u的非线性函数模型拟合成线性形式xdot = Ax + Bu这样做的意义是什么?好吧,我们来谈谈这个。我是Brian,欢迎来到MATLAB技术讲座。
首先,让我们看一个水箱系统的MATLAB示例。水通过顶部的开口以与驱动水泵的电压成正比的速率泵入水箱。在底部有一个排水管,水可以从水箱流出。水箱中水的高度变化,可以通过控制泵的电压来影响。如果你打开MATLAB命令窗口,输入“watertank”,下面的Simulink模型就会弹出。万博1manbetx这是一个经典的反馈系统;有一个参考水位高度,一个控制器,和一个代表水箱系统动态的装置,输入是电压,输出是水位高度。在植物子系统中,我们有关于如何建模的详细信息。由此我们可以写出这个方程组的微分方程。参数a, b,和大写a是容器的特定参数,它们表示与进出容器的流量和横截面积有关的常数。 So what we have is the change in height of the water equals the amount of height gained by the water entering the tank minus the height lost by water leaving. And the amount lost is proportional to the square root of the water height. This square root makes it a nonlinear model. So at this point, we could linearize this model and fit it to the form x dot = Ax + Bu.
问题可能是,为什么要费那么大劲去得到一个线性模型呢?为什么不继续使用更精确的非线性模型呢?至少有三个很好的理由。首先,我们可以比非线性系统更容易地检验线性系统的局部稳定性和理解动力学。第二,我们有很多工具可以用来为线性模型设计控制器。第三,用线性模型代替非线性模型可以加快模拟速度。如果您正在运行一个硬件在环测试,其中您的控制器在目标硬件上运行,但它与其余系统动态的模拟交互,那么这可能很重要。在某些情况下,运行该模拟所涉及的非线性数学问题不能足够快地解决,无法跟上实时硬件的速度,因此用更快的线性等效方法代替它是一个不错的选择。让我们开始线性化的过程。
在任何时刻,动力系统都有一种状态,即定义系统状态(位置、速度、电压等)的系统变量的特定配置。一个系统可能处于的所有可能构型的集合叫做状态空间。这是一个系统可以经历的每一个方向、运动和条件。举个例子,一个摆有两种状态角和角速率导。状态空间从0延伸到2,覆盖整个圆导从负到正无穷,覆盖所有可能的旋转速率。当然,实际上,你的摆可能永远不会超过10弧度/秒,所以我们可以把它缩小到这个更小的工作状态空间,或者工作包线。如果我们能得到一个线性模型在整个状态空间都能很好地工作,那就太理想了。但通常情况并非如此,因为单个线性模型可能很好地表示了某些状态下的动态,但由于系统的非线性,它在其他状态下的表现可能很差。为了解决这个问题,我们在特定的位置线性化,称为操作点,我们想要最小误差。一种重要且常见的工作点类型是系统处于稳态或平衡状态时。 This means that if you initialized the system at this state, then the states would not change over time. Or, another way of putting it: x dot for all time equals zero. That might mean that the system states are at an equilibrium on their own with no external inputs, like a pendulum that has two equilibrium points, one hanging straight down and one perfectly balanced pointing straight up. But we also have inputs into the system and the combination of inputs and system states can also be an equilibrium. For example, if the input into the pendulum is a torque, then we can find a constant torque that moves the equilibrium point to pi/4 radians. If we initialized the pendulum in this condition, it would not move since the torque from gravity and the input torque perfectly balance out and we can linearize around this condition. The act of finding an equilibrium by adjusting the input signals is called trimming. This is a term that is borrowed from aerospace, like trimming an aircraft to fly straight and level.
想象一下,一架飞机在没有电梯控制输入的情况下,以给定的空速以零迎角飞行时保持恒定的高度。这是系统的稳态条件。然而,如果飞机开始减速,或者飞行速度低于稳态状态,机翼产生的升力就会减少,高度就会开始下降。在这个新速度下,如果飞行员向系统添加一个输入,通过拉回轭架使电梯偏转,提高迎角并产生更多升力,高度仍然可以保持不变。但是,飞行员不必不断地拉回轭架,而是可以调整电梯,使轭架的中性位置产生所需的电梯位置,从而保持高度不变。这就是修剪的含义:找到系统状态和输入的组合,在您选择的工作点产生稳定状态的情况。
你可以想象,如果你的系统有几十个你想要保持不变的状态,你可以用几个控制输入来控制它们,那么修剪是一项复杂的任务。在下一个视频中,我们将讨论一些在Simulink中可用的工具,使修剪变得容易。万博1manbetx现在,我们已经足够理解切边的概念,以及它与稳定运行点的关系。
让我讲个题外话。在状态空间的任意点上剪到稳态并不总是可能的。例如,即使状态空间允许这种运动,也不存在导致飞机向后稳定飞行的输入组合。所以你必须对你的系统有足够的了解这样你就不会选择一个你无法找到平衡的状态组合。
好吧,回到正题。我们选好了工作点,调整了系统使它处于平衡状态。下一步是在那个工作点线性化。
为了演示如何做到这一点,让我们快速浏览两个示例。我从维基百科上截取了第一个例子,但我想在这里复述一遍并稍微修饰一下因为我认为它会给你们线性化背后的基本概念以及数学是如何简化的。
我们来看方程f(x) =√x,这不是微分方程,但它仍然有助于理解这些点。
x的平方根是一个非线性函数它看起来像这样。我们可能会问,这个函数在x = 4处的值是多少?这很容易解,我们得到2。然而,一个更难的问题是,x=4.001处的值是多少?用手算可能要花很多时间。然而,我们可以通过使用线性方程估计值来简化它。其思想是,只要我们不偏离工作点太远,那么线性估计值和真实值之间的误差就会很小。好的,我们来做一下。直线方程为y = mx + b,其中m为斜率,b为偏移量。
沿着函数任意一点的斜率就是函数的导数,而偏移量就是函数在工作点的值。所以线性化方程y(x)等于工作点处的斜率x横乘以到工作点的距离加上偏移量。这是关于x杠的线性化,在我们的例子中,x杠等于4。这就得到了线性方程1/4 * x - 4 + 2。
现在我们可以检查x = 4.001处的值,并轻松地计算出2.00025。在4.001处求值的实函数是2.00024998。这还不到百万分之一。虽然感觉线性化有很多步骤,但我们现在可以用这个方程快速估计4.1或3.9或任何接近工作点的数字,而且误差很小。
然而,如果我们尝试在x = 2处使用线性方程,那么误差超过0.5%。如果这个误差超出了我们的处理能力,我们也可以选择在工作点2处线性化,然后当x在2和4之间变化时,在两个线性模型之间切换。
尽管这个例子很简单,但它与我们开始时的坦克例子联系得很好。记住Hdot,它是状态H和输入V的函数,是由这个非线性方程给出的。我们来线性化它。首先,我们选择一个工作点,我将坚持H杠= 4,使它与上一个问题相似。现在我们可以通过将H设为工作点并求解输入来修整系统,使H导= 0。我们得到V杠等于2a / b,有了这些值,函数在工作点处的值等于0。
这个系统只有一个状态,高度,和一个输入,电压。所以我们可以期望最终的线性方程是这种形式,其中两个矩阵都是1 × 1。好的,现在我们在工作点处有了一个修剪过的系统,我们现在可以线性化它了。我想提醒你们,我们之前做的是把函数√X替换成一条直线y = mx + b,我们要做一些不同的事情,但结果会非常相似。我们要用泰勒级数展开微分方程但不是把所有项都延伸到无穷大,我们要忽略所有高阶项。这样我们只保留0和一阶项,或者泰勒级数的一阶导数。
这个过程中涉及到的数学知识不是我这集视频要讲的内容,但我的目标只是让你们了解如何用函数的导数来生成线性逼近。如果你进行泰勒级数展开并去掉项,你会得到下面的函数。
看看这个。它与y = mx + b有惊人的相似之处。我们有偏移量,或函数的起点,它就是在工作点的Hdot的值。然后再加上函数的斜率它与变化状态的关系乘以状态到工作点的距离。第一个加法处理状态变化带来的变化,第二个加法处理输入变化带来的变化。
但我们可以进一步简化,因为函数在工作点的值为零。现在我们可以求偏导了。为了进一步简化结果,我们可以重新标记调用0的位置。例如,我们可以从工作点开始测量高度,而不是从罐底开始测量高度。它将H - Hbar压缩成H V - Vbar压缩成V。
剩下的就是水箱系统在工作点4处的线性方程。就像前面的例子一样,当我们偏离这个操作点时,这个线性模型就不太像它的非线性模型了。如果我们不能处理错误,那么我们就会在一个新的工作点上进行第二次线性化。
当你有多个线性模型时,你可以为每个模型开发一个线性控制器,并将控制增益从一个区域转移到下一个区域。这就是增益调度背后的思想,如果你有兴趣了解更多,我在描述中链接了一个关于这个主题的视频。还有一个链接到水箱模型线性化示例和MathWorks页面,以了解更多关于Simulink模型线性化的知识,所以我希望你也能看看它们。万博1manbetx
这里我们做的是雅可比线性化。我们通过观察系统的一阶导数建立了一个线性模型。这种线性化要求函数在工作点处是可微的。但是也有其他的线性化方法,在下一个视频中,我们将探讨一些其他的方法,它们有什么工具,以及如何理解它们在背后做什么。
如果你不想错过下一期Tech Talk视频,不要忘记订阅这个频道。此外,如果你想看看我的频道,控制系统讲座,我在那里涵盖了更多的控制理论主题。感谢收看。下次见。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。