当Sympy dsolve使用串联解决方案忽略初始条件?

问题描述 投票:0回答:0

>python Python 3.13.1 (main, Dec 4 2024, 18:05:56) [GCC 14.2.1 20240910] on linux Type "help", "copyright", "credits" or "license" for more information. >>> from sympy import * >>> x=symbols('x') >>> y=Function('y') >>> ode=Eq(4*y(x) + Derivative(y(x), (x, 2)),0) >>> dsolve(ode , y(x),hint='2nd_power_series_ordinary') Eq(y(x), C2*(2*x**4/3 - 2*x**2 + 1) + C1*x*(1 - 2*x**2/3) + O(x**6)) >>> dsolve(ode , y(x),ics={y(0):0,diff(y(x),x).subs(x,0):3},hint='2nd_power_series_ordinary') Eq(y(x), C2*(2*x**4/3 - 2*x**2 + 1) + C1*x*(1 - 2*x**2/3) + O(x**6)) >>>

正确的结果应如下

ode:=4*y(x)+diff(y(x),x$2)=0; dsolve(ode,y(x),'series'); collect(convert(%,polynom),[y(0),D(y)(0)])

给予

y(x) = (1 - 2*x^2 + 2/3*x^4)*y(0) + (x - 2/3*x^3 + 2/15*x^5)*D(y)(0)
在上述,y(0)和d(y)(0)(这是y'(0))基本上是Sympy所说的C1和C2。

现在,与IC:

 dsolve([ode,y(0)=0,D(y)(0)=3],y(x),'series')

Gives

  y(x) = 3*x - 2*x^3 + 2/5*x^5 + O(x^6)

您看,当iC被赋予IC时,解决方案中不应有C1和C2。

是否有解决方法(除了要解决C我本人以外)以使DSOLVE在没有C时返回解决方案时,没有C。

您看到的行为不是错误,而是Sympy dsolve中系列解决实现的已知限制。在当前实现中,当您使用系列提示(例如'2nd_power_series_ordinary')时,dsolde以任意常数(例如C1和C2)返回截断的功率序列,而无需自动使用提供的初始条件为其自动求解。
在使用系列提示时,当前版本的DSOLVE当前版本的DSOLVE上没有一个内置的解决方法。如果需要直接应用IC,则需要进行后处理或使用其他方法。

sympy
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.