gpt4 book ai didi

python - SymPy "solves"它不应该求解的微分方程

转载 作者:太空狗 更新时间:2023-10-30 00:53:19 24 4
gpt4 key购买 nike

这是我做的:

from sympy import *
x = symbols("x")
y = Function("y")
dsolve(diff(y(x),x) - y(x)**x)

我得到的答案(SymPy 1.0)是:

Eq(y(x), (C1 - x*(x - 1))**(1/(-x + 1)))

但这是错误的。 MathematicaMaple 都无法解决这个 ODE。这里发生了什么?

最佳答案

一个错误。 SymPy 认为它是一个 Bernoulli equation

y' = P(x) * y + Q(x) * y**n

不检查指数 n 是否恒定。所以解决方案是错误的。

我提出了一个issue在 SymPy 跟踪器上。它应该很快在 development version of SymPy 中修复随后在 1.2 版中。 (顺便说一句,1.0 有点旧,很多东西在 1.1.1 中都有改进,但不是那个。)

通过更正,SymPy 认识到没有明确的解决方案并求助于幂级数方法,产生了幂级数的一些项:

Eq(y(x), x + x**2*log(C1)/2 + x**3*(log(C1)**2 + 2/C1)/6 + x**4*(log(C1)**3 + 9*log(C1)/C1 - 3/C1**2)/24 + x**5*(log(C1)**4 + 2*(log(C1) - 1/C1)*log(C1)/C1 + 2*(2*log(C1) - 1/C1)*log(C1)/C1 + 22*log(C1)**2/C1 - 20*log(C1)/C1**2 + 20/C1**2 + 8/C1**3)/120 + C1 + O(x**6))

你不必等待补丁来获得这个幂级数,它可以通过给 SymPy 一个“提示”来获得:

dsolve(diff(y(x), x) - y(x)**x, hint='1st_power_series')

在初始条件下效果更好:

dsolve(diff(y(x), x) - y(x)**x, ics={y(0): 1}, hint='1st_power_series')

返回

Eq(y(x), 1 + x + x**3/3 - x**4/8 + 7*x**5/30 + O(x**6))

关于python - SymPy "solves"它不应该求解的微分方程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com