r() 函数在 SymPy 的 dsolve 的 return 值中意味着什么?

What does r() function mean in the return value of SymPy's dsolve?

我要评估phi(+oo)的价值 其中 phi(xi) 是 ODE

的解
Eq(Derivative(phi(xi), (xi, 2)), (-K + xi**2)*phi(xi))

K是已知实变量。 通过dsolve,我得到了解决方案:

Eq(phi(xi), -K*xi**5*r(3)/20 + C2*(K**2*xi**4/24 - K*xi**2/2 + xi**4/12 + 1) + C1*xi*(xi**4/20 + 1) + O(xi**6))

在右侧的第一项中具有未知函数 r()。 这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import sympy
from sympy import I, pi, oo

sympy.init_printing()

def apply_ics(sol, ics, x, known_params):
    """
    Apply the initial conditions (ics), given as a dictionary on
    the form ics = {y(0): y0, y(x).diff(x).subs(x, 0): yp0, ...},
    to the solution of the ODE with independent variable x.
    The undetermined integration constants C1, C2, ... are extracted
    from the free symbols of the ODE solution, excluding symbols in
    the known_params list.
    """

    free_params = sol.free_symbols - set(known_params)
    eqs = [(sol.lhs.diff(x, n) - sol.rhs.diff(x, n)).subs(x, 0).subs(ics)
            for n in range(len(ics))]
    sol_params = sympy.solve(eqs, free_params)

    return sol.subs(sol_params)

K = sympy.Symbol('K', positive = True)
xi = sympy.Symbol('xi',real = True)
phi = sympy.Function('phi')
ode = sympy.Eq( phi(xi).diff(xi, 2), (xi**2-K)*phi(xi))

ode_sol = sympy.dsolve(ode)
ics = { phi(0):1, phi(xi).diff(xi).subs(xi,0): 0}
phi_xi_sol = apply_ics(ode_sol, ics, xi, [K])

其中ode_sol是解,phi_xi_sol是应用初始条件后的解。 由于 r() 在 NumPy 中未定义,我无法通过

评估结果
for g in [0.9, 0.95, 1, 1.05, 1.2]:
    phi_xi = sympy.lambdify(xi, phi_xi_sol.rhs.subs({K:g}), 'numpy')

有谁知道这个函数 r() 是什么意思,我应该如何处理它?

从结果的形式可以看出,求解器回退到幂级数解(而不是像 WolframAlpha 那样根据抛物柱函数搜索解)。

所以让我们设置 phi(xi)=sum a[k]*xi^k 导致系数方程(对 k<0 使用 a[k]=0

(k+2)(k+1)a[k+2] = -K*a[k] + a[k-2]

a[0] = C2  
a[1] = C1  
a[2] = -K/2*C2
a[3] = -K/6*C1
a[4] = (K^2/2 + 1)/12*C2
a[5] = (K^2/6 + 1)/20*C1

插入幂级数解应该是

C2*(1-K/2*xi**2+(K**2/24+1/12)*xi**4) + C1*xi*(1-K/6*xi**2+(K/120+1/20)*xi**4) + O(xi**6)

与sympy解相比,所有同时包含C1K的项都缺失了,尤其是缺失的3阶项无法解释。看来是求解过程提前结束了,或者是某个方程变换没有正确反推。

请注意,sympy 中的 ODE 求解器例程是实验性的和基本的。此外,幂级数解仅给出 xi 的小值的有效信息,无法得出 +oo.

处极限的任何精确值

sol_params 是一个包含单个字典的列表。传递该字典而不是列表给出解决方案 phi_xi_sol 没有 r(3):

Eq(rho(s), (-K*s**2/2 + s**2*xi**2/2 + 1)*(-6*rho(s) + 6*C2*s - C2*K*s**3 + O(s**5))/
            (3*(K*s**2 - 2)) + C2*(-K*s**3/6 + s**3*xi**2/6 + s) + O(s**5))