You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

显式欧拉法求解非线性微分方程组提前终止问题排查

问题:显式欧拉法求解非线性微分方程组提前终止的原因分析

我尝试用显式欧拉法求解如下非线性微分方程组:

x' = f₁(x,y)
y' = f₂(x,y)

已知解对应的曲线需在x-y平面连接初始点(x_initial,y_initial)与(0,1),但计算得到的曲线在(0.17,0.98)附近提前终止。我尝试调整参数,但仍无法将结果进一步推向(0,1)。起初我认为方程组在终点附近变为刚性ODE,但查阅刚性ODE相关资料后排除了该可能。请问可能的问题是什么?

我的Python代码

import math
import numpy as np
import matplotlib.pyplot as plt

q=1

# 定义f1和f2相关的辅助函数
def l(lna,x,y,m,n,xi,yi): 
  return n *m**(-1)*(np.divide((yi**2)*(np.float64(1)-np.power(x,2)-np.power(y,2))*np.exp(3*(lna-lnai)),(y**2)*(1-xi**2-yi**2)))**(-1/n)

def f1 (x,y,l):
  return -3*x + l*np.sqrt(3/2)* y**2+ 3/2 *x*(2*(x**2)+q*(1-x**2-y**2)) 

def f2 (x,y,l): 
  return -l*np.sqrt(3/2) *y*x + 3/2 *y*(2*x**2+q*(1-x**2-y**2))

# 显式欧拉法实现
def e_E(xa,xb,dlna,m,n,xi,yi):          
    N = int(round((lnaf-lnai)/dlna))     
    lna = np.linspace(0, N*dlna, N+1)
    x = np.empty(N+1) 
    y = np.empty(N+1)
    x[0],y[0] = xi,yi
    for i in range(N):
      sd = l(lna[i],x[i],y[i],m,n,xi,yi)
      x[i+1] = x[i] + dlna * f1(x[i],y[i],sd)
      y[i+1] = y[i] + dlna * f2(x[i],y[i],sd)
    return x,y,lna

# 自变量lna的范围
lnai = np.float64(0)
lnaf = np.float64(15)

# 步长
dlna = np.float64(1e-3)

# 初始条件
yi = np.float64(1e-5)
xi = 0

# 计算并绘图
x1,y1,lna1 = e_E(lnai,  lnaf,  dlna,  np.float64(0.1),       np.float64(2), xi, yi)
plt.plot(x1,y1,'b',label = ('x1'))
plt.legend()
plt.grid()
plt.ylabel('y')
plt.xlabel('x')
plt.show()

解曲线对比

我的x-y平面解曲线

我的x-y平面解曲线

完整/正确解曲线

完整/正确解曲线

内容的提问来源于stack exchange,提问作者user280016

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:55:35