【问题标题】:Strange r appears in dsolve output using Sympy奇怪的 r 出现在使用 Sympy 的 dsolve 输出中
【发布时间】:2021-12-29 12:17:45
【问题描述】:

我对求解以下微分方程感兴趣:

eqn = 4.0*N*sqrt(N - 1)*rho(s) + (4*s**2*(N - 1) + (N - 2*s*(N - 1))**2)*Derivative(rho(s), (s, 2))

我尝试使用 Sympy 的 dsolve:

dsolve(eqn,rho(s), n=5)

它给出了以下输出:

Eq(rho(s), -1.33333333333333*s**3*r(2.0)/N + 1.33333333333333*s**3*r(2.0) + C2*(1 - 2.0*s**2*sqrt(N - 1.0)/N) + C1*s*(1.0 - 0.666666666666667*s**2*sqrt(N - 1.0)/N) + O(s**5))

这个奇怪的“r(2.0)”是什么?我尝试搜索,但没有找到任何有用的东西。

感谢您的帮助!

【问题讨论】:

标签: python sympy differential-equations


【解决方案1】:

浮点数的存在表明输入可能有问题(因为它不会提供所需的输出)。如果您将4.0 更改为4,那么您将没有用于求解方程的递归函数留在解中。如果您查看ode_2nd_power_series_ordinary 中的finaldict 值,您的4.0 看起来像这样:

{r(2): -2.0*sqrt(N - 1.0)*r(0)/N, 
 r(3): 0.666666666666667*(2*N*r(2.0) - sqrt(N - 1.0)*r(1) - 2*r(2.0))/N}

而不是

{r(2): -2*sqrt(N - 1)*r(0)/N, 
 r(3): 2*(-4*sqrt(N - 1)*r(0) - sqrt(N - 1)*r(1) + 4*sqrt(N - 1)*r(0)/N)/(3*N)}

使用4而不是4.0的解决方案没有r(2.0)

Eq(rho(s), 
    C2*(s - 2*s**3*sqrt(N - 1)/(3*N)) + 
    C1*(1 - 8*s**3*sqrt(N - 1)/(3*N) - 
    2*s**2*sqrt(N - 1)/N + 8*s**3*sqrt(N - 1)/(3*N**2)) + O(s**5))

【讨论】:

  • 谢谢!我在调试代码时注意到在 ode_2nd_power_series_ordinary 中有两个对函数 solve 的调用,它们将索引转换为浮点数并禁止替换 r 工作。有趣的是,在solve的调用中设置rational=False会从最终答案中消除r,代价是使所有系数都浮动。我仍在努力了解这怎么可能!
  • 更好的是,添加标志rational=True 可以解决问题并产生有理系数。我不明白这是怎么可能的,因为这应该是函数的默认行为。
  • 我打开了一个问题here
  • 糟糕,我也在github.com/sympy/sympy/issues/22525 开了一个。我该怎么办?关闭那个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多