如何在python中数值求解具有奇点的非线性常微分方程(BVP)?

2024-10-17 10:30:26 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我必须用数值方法求解以下常微分方程y'+f(y)*(y')^2=0:ODE

最初在[y_i,y_f]之间,其中y=y(t)和y(0)=y_i。主要问题是函数f(y)有一个(规则的)奇点(无法发布图像)。 另外,f(y)是通过长时间的数值计算得到的,所以我没有解析表达式。问题是奇点位于y_i和y_f之间。到目前为止,我还没有找到任何方法来帮助我解决这类问题。它是否可以作为BVP o IVP来求解并不重要,但我需要跨越奇点

我所尝试的:

  1. 我将f(y)近似为-2/(y-y*),其中y*是奇点,并尝试使用Runge-kutta、odeint和Runge-kutta-Fehlberg方法作为IVP来解决这个问题。但我过不去
  2. 我试图用RKF作弊,因为y趋于常数,我手动增加它,迫使它穿过奇点,但随后解增加到无穷大,因此不是有效解

  3. 与前面相同,但使用数值定义的函数f(y),而不是其近似值。

  4. 与BVP相同,但使用shooting方法并从Python中求解_-BVP

Tags: 方法函数图像表达式规则数值oderunge
1条回答
网友
1楼 · 发布于 2024-10-17 10:30:26

你可以在除以y'后立即积分得到ln(y')+F(y)=cy'*exp(F(y))=CF'=f,这样原则上你可以通过简单的求积计算t(y),然后通过函数值表的求逆得到解y(t)

您的示例集成到y'=C*(y-y*)^2y(t)=y(0)/(1-C*y(0)*t),这也可能由于分母的原因导致解决方案公式中出现奇点。这意味着,即使存在一个解,您也必须从非常接近它的地方开始,否则解的过程可能必须穿过一个奇异雅可比曲面或其他不可能的曲面,并且在这一点上无法继续

相关问题 更多 >