给定一组 ODE(或离散时间),有没有办法以数值方式找到运动常数?
为了,对角化矩阵并找到等于 1 的特征值,但这只能找到那是不变的。我想找到诸如半径、能量和动量之类的东西。
当我整合李群时,我对运动常数特别感兴趣。
编辑:
只是为了澄清,至少为了这个问题,运动常数被定义为,
因此,对于给定的轨迹,我们可能会期望多个运动常数,但我想找到运动常数这样它们对于所有可能的轨迹都是恒定的。
给定一组 ODE(或离散时间),有没有办法以数值方式找到运动常数?
为了,对角化矩阵并找到等于 1 的特征值,但这只能找到那是不变的。我想找到诸如半径、能量和动量之类的东西。
当我整合李群时,我对运动常数特别感兴趣。
编辑:
只是为了澄清,至少为了这个问题,运动常数被定义为,
因此,对于给定的轨迹,我们可能会期望多个运动常数,但我想找到运动常数这样它们对于所有可能的轨迹都是恒定的。
一般来说,这似乎是一个难以解决的问题,但这里有一个想法。
假设您寻找形式的所有运动常数
那么条件是可以近似为矩阵方程
这样你就可以找到所有可能的系数通过询问数值核来生成运动常数. 如果运动常数是多项式及其衍生物,这会起作用,但是由于您可以拥有多少不同的单项式,矩阵可能会非常大。这确实需要您提前猜测运动常数可能是什么样子,我不知道这对您是否现实。
如果您可以使用通用常量写下问题,那么这将成为参数估计问题。DifferentialEquations.jl 文档更详细地解释了一堆方法,但我将重点介绍此处示例的简单且标准的方法。该示例是关于查找生物常数(Lotka-Volterra 中的出生率和死亡率),但其想法与查找运动常数相同:将问题转换为带有参数的 ODE 并优化参数值。
内部循环本质上是:
如果你有一些关于微分方程路径应该是什么的数据,那么你可以定义一个成本函数,它是l2
数据和每个点的数值解之间的差异。最小化此成本与最大化正态对数似然相同,并导致找到最适合数据的 ODE 参数。
但这种技术不需要数据。您可以在解决方案上定义任何有意义的损失函数,并使用适合它的优化器。例如,您可能只知道您想要的最大值有时成为. 所以你可以使成本函数为
并让优化器搜索最能满足此约束的参数。当然,越能更好地定义成本函数以匹配您真正想要的结果,您就会得到更好的结果,尽管更复杂的成本函数会给优化器带来更大的压力。
这里的基本优化方法包括 Levenberg-Marquardt,你会看到一些使用它的教程,但你真的不应该使用它,因为它对找到局部最小值非常敏感,而且这些参数估计问题对于局部优化器来说非常困难。相反,您应该使用像 NLopt 这样好的全局优化库来获得不错的结果(这仍然很困难!)
仍然希望有一个更好的答案,但这是我想到的(受到 Christ Rackauckas 所说的其他内容的启发),但不是特别喜欢。
定义参数化的“运动常数”然后优化喜欢,
我们离开“自由”,因此每个轨迹的每个常数仍然可以缩放,但受制于每个时间步长的状态函数。
下一个运动常数的训练可以通过添加一个损失项来解释最后一个运动常数。
我不喜欢这个,原因很明显,这是一个可怕的优化问题要解决。