SymPy 的 dsolve 的返回值中的 r() 函数是什么意思?

我想评估ODE的解决方案phi(+oo) 在哪里的价值phi(xi)


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()意思,我应该如何处理它?


慕无忌1623718
浏览 119回答 2
2回答

慕码人2483693

从结果的形式可以看出,求解器回退到幂级数解(而不是像 WolframAlpha 那样根据抛物柱函数搜索解)。因此,让我们设置phi(xi)=sum a[k]*xi^k导致系数方程(使用a[k]=0for k<0)(k+2)(k+1)a[k+2] = -K*a[k] + a[k-2]a[0] = C2&nbsp;&nbsp;a[1] = C1&nbsp;&nbsp;a[2] = -K/2*C2a[3] = -K/6*C1a[4] = (K^2/2 + 1)/12*C2a[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 解决方案相比,所有包含C1和的术语K都缺失,尤其是缺失的 3 度术语无法解释。似乎求解过程提前结束,或者某些方程变换没有正确反转。请注意,sympy 中的 ODE 求解器例程是实验性的和基本的。此外,幂级数解仅给出 的小值的有效信息xi,无法推导出 处极限的任何精确值+oo。

慕神8447489

这sol_params是一个包含单个字典的列表。传递该字典而不是列表给出了phi_xi_sol没有的解决方案r(3):Eq(rho(s),&nbsp;(-K*s**2/2&nbsp;+&nbsp;s**2*xi**2/2&nbsp;+&nbsp;1)*(-6*rho(s)&nbsp;+&nbsp;6*C2*s&nbsp;-&nbsp;C2*K*s**3&nbsp;+&nbsp;O(s**5))/ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3*(K*s**2&nbsp;-&nbsp;2))&nbsp;+&nbsp;C2*(-K*s**3/6&nbsp;+&nbsp;s**3*xi**2/6&nbsp;+&nbsp;s)&nbsp;+&nbsp;O(s**5))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python