解决具有初始值和最终值约束的耦合ODE


12

我的问题的实质如下:我有两个ODE的系统。一个具有初始值约束,另一个具有最终值约束。可以将其视为对某些变量具有初始值约束而对其他变量具有最终值约束的单个系统。

详细信息如下:

我正在尝试使用连续时间有限水平LQR控制器来驱动线性动力学系统。我想继续使用Python生态系统。

该系统是在形式,受x˙(t)=Ax(t)+Bu(t)x(0)=x0

LQR解决方案生成矩阵,使得在线性的最优控制输入u(t)为u t = K t x t x t K(t)x(t)u(t)=K(t)x(t)

其中K(t)=R1BTP(t)

是解决一个连续时间黎卡提微分方程(请注意,此P 是一个矩阵)P(t)P(t)

经受P˚F=QP˙(t)=ATP(t)P(t)A+P(t)BR1BTP(t)+QP(tf)=Q

B x 0 Q Q f R t fABx0QQfRtf

用英语:您有一些以状态开始的动力系统。LQR控制器生成一个反馈矩阵,以在时间0t f之间使用(t f通常称为问题的时间水平)x00tftf

请注意,两个ODE仅在一个方向上耦合的解不取决于x t 。因此,解决该问题的一种方法是反转Riccati方程,以将最终值问题转换为初始值问题,并使用标准ODE积分器找到时间0t f之间的数值解。然后,我可以使用此数值解来找到x t P(t)x(t)0tfx(t)。这与我有关,因为x(t)的数值ODE求解器不一定会与对$ P(t)的数值解中的时间同时采样ODE。也许有一些聪明的方法可以执行此操作。

我预计解决问题的另一种方法是一起解决系统问题,但是我不知道如何处理初始值约束和最终值约束的混合问题。这些问题在计算上需要解决很多吗?我可以在SciPy / Python中做到吗?

Answers:


8

我不同意其他答案。由于您在反向和正向时间问题之间仅存在单向耦合,因此按您的建议依次解决它们会更加有效。你只需要一个溶液,可以在任何时间进行评估[ 0 ˚F ]P(t)t[0,tf]

您可以通过在输出值之间进行插值来实现。我建议您使用支持密集输出的Runge-Kutta方法。例如,scipy.integrate.ode.dopri5基于这种方法。因此,您应该能够指定间隔很小的输出时间,而不必强迫积分器采取很小的步骤(假设正确实现了scipy接口)。


P(t)PŤ

6

这被称为两点边值问题,并且已经得到了很好的研究。

射击方法很容易编程,但数值上可能非常不稳定。

解决这些问题的标准方法是使用多重射击方法,并使用标准的非线性求解器求解相应的非线性方程组。有关方程式非线性系统的求解器列表,请参见例如
http://www.mat.univie.ac.at/~neum/glopt/software_l.html#nonlin

您可以将常规网格上的状态作为时间变量(通常不需要非常精细的网格),将边界条件和将时间t变量映射到时间t + h变量的映射作为方程式。这给出了与变量一样多的方程式。您只需要提供用于评估网格上给定状态配置的此映射的例程,非线性求解器就可以执行其他所有操作。(如果最初的猜测很差,也许您需要多个起点。)

Wikipedia http://en.wikipedia.org/wiki/Direct_multiple_shooting_method 提供了一个有用的过程描述,如果上面的描述还不够详细。Stoer / Bulirsch所著的书中引用了完整的细节。


5

我不知道如何在Python中执行此操作,但是您要在文献中查找的关键字是“拍摄方法”。这就是解决具有初始值和最终值约束的问题的方法的名称。


1

AUTO可以解决两点BVP,并且具有python界面,并且相对易于安装。http://www.ma.hw.ac.uk/~gabriel/auto07/node6.html

如果您要先解决P(t)并将其作为输入输入另一个ODE,那么使用PyDSTool进行设置的有效方法。PyDSTool很容易在任何平台上安装,请参阅http://pydstool.sf.net。默认情况下,它将对先前计算的解决方案仅使用线性插值(因此,请以精细的时间分辨率进行计算)。但是,即使使用自适应积分器,您也可以强制PyDSTool准确地移至所需的时间点(尽管这可能效率低下并导致不准确)。但是,由于具有足够小的最大时间步长,因此线性插值和第二个系统的快速积分器(内置Dopri)意味着您可以使用像这样的“常规”系统。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.