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

含奇点的一阶微分方程解曲线Python绘图方法

一阶微分方程u~v解曲线绘制实现

问题已知条件

  • 待求解微分方程:$\displaystyle \frac{u}{v}\cdot\frac{dv}{du} = \frac{1-u}{u+v-3}$
  • 边界条件:$u=3$时$v=0$,点$(3,0)$处导数值$\frac{dv}{du}=-\frac{5}{3}$
  • 理论解特征:解曲线为环绕奇点$(1,2)$的螺旋线

实现逻辑

原方程在$(3,0)$处为0/0型奇点,直接从该点启动数值积分会触发除零错误,因此利用已知导数值取距离该点极小偏移的解上点作为积分初值,沿u轴正负两个方向积分,即可得到完整的螺旋线解。

可运行Python代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# 整理为显式微分方程 dv/du = f(u,v)
def dv_du(u, v):
    return (v * (1 - u)) / (u * (u + v - 3))

# 取初值近点,避开(3,0)处0/0奇点
eps = 1e-6
u_start = 3 - eps
v_start = (-5/3) * (u_start - 3)  # 由已知点导数计算近点v值
# 校验近点导数值
print(f"初值近点导数:{dv_du(u_start, v_start):.4f},预期值:{-5/3:.4f}")

# 双向积分覆盖完整曲线
sol_neg = solve_ivp(dv_du, [u_start, -1.5], [v_start], max_step=0.005, rtol=1e-9, atol=1e-12)
sol_pos = solve_ivp(dv_du, [u_start, 5.5], [v_start], max_step=0.005, rtol=1e-9, atol=1e-12)

# 拼接积分结果
u_total = np.concatenate([np.flip(sol_neg.t), sol_pos.t[1:]])
v_total = np.concatenate([np.flip(sol_neg.y[0]), sol_pos.y[0][1:]])

# 绘制曲线
plt.figure(figsize=(8,8))
plt.plot(u_total, v_total, color='#1f77b4', linewidth=1.2, label='u-v解曲线')
plt.scatter(1, 2, c='red', s=70, zorder=10, label='奇点(1,2)')
plt.scatter(3, 0, c='green', s=70, zorder=10, label='边界点(3,0)')
plt.xlabel('u', fontsize=12)
plt.ylabel('v', fontsize=12)
plt.axis('equal')
plt.grid(alpha=0.3)
plt.legend()
plt.title('一阶微分方程环绕奇点螺旋解曲线')
plt.show()

运行代码后会输出初值近点的导数校验值,与给定的-5/3一致,生成的图像中蓝色曲线即为环绕红色奇点的螺旋解。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:18:53