使用 Runge_kutta 求解 ODE 系统的最佳形式

计算科学
2021-12-08 00:41:11

最近,当我使用 runge-Kutta 方法求解 ODE 系统时,当我从球坐标转换变量时,我得到了很多不同的结果(rθ) 到柱坐标(ρz) 并再次解决。

(这个不用提了

cos(θ)=zz2+ρ2

r=z2+ρ2 )

只有使用第二个系统获得的结果(在仅包含变量多项式且没有变量分数的圆柱体中)与已发布的结果一致。

现在,我想知道是否有一个简单的规则来确定使用诸如 runge_kutta 之类的数值算法解决的系统的最佳形式。(例如,最好避免使用 :division of variables)(或者这种分歧可能是我的计算中某处有错误?(即不可能有这样的结果差异))

2个回答

在选择基础时,我会确定两个主要问题:

  1. “平滑”的物理轨迹在基础上应该是平滑的(例如,通过多项式很好地近似)

  2. 基础应该是良好的

当使用球坐标或柱坐标时,越过极点的路径将经历一个跳跃π在角度ϕ. 如果您的模拟中可能存在这样的轨迹,我建议使用正常的笛卡尔基(x,y,z). 这也有利于独特性。我假设您不会天真地将阶段重新投射到ϕ[0,2π),否则赤道轨道会有问题。

通过原点的匀速轨迹z方向在圆柱基础上是线性的,但不连续(从θ=πθ=0) 在球形基础上。也许您的模拟具有与此类似的轨迹?

如果你从一个数学系统开始,通过坐标转换将它转换为另一个系统,然后求解,你会得到相同的结果。如果您不是,则有三种可能性(我能想到):

  • 您在转换中犯了一个错误
  • 转换中的某些奇异性导致它在您正在解决的域中无效
  • 问题的解决方案不止一种,转换只会让您选择不同的解决方案(请注意,如果您的 ODE 系统具有唯一性,这是不可能的)

将数值 ODE 求解器应用于系统时,您需要同时具有稳定性和准确性。最重要的是,您希望它在相当短的时间内运行。

通过为单步方法选择足够小的时间步来实现稳定性和准确性。一些多步方法无法实现稳定性,因为它们的性质引入了可能不会归零的额外解决方案。如果您有相同问题的两个公式,它们具有相同的解,那么任何稳定且足够准确的 ODE 求解器都会为您提供相同的结果。

另一方面,某些公式可能具有不同的稳定性和准确性特性,要求相同的求解器针对同一问题的不同公式需要不同的时间步长。要找出这些特征,您必须在两种公式中分析您的问题,以便您的求解器知道理论上哪个会更好。大多数求解器都是在标准 ode 上进行分析的,因此,这些分析结果不会让您深入了解您的问题。