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

如何在微分方程相图中添加变量φ的局部放大子图?

解决微分方程解的局部放大子图绘制问题

你的问题核心是当前子图绘制的是独立生成的线性数组(np.linspace生成的phi_1和phi_2),这和微分方程的解完全无关,自然不是你要的放大效果。正确做法是从每个微分方程的解中,筛选出落在目标放大区域(phi1∈[-0.25,0.25]且phi2∈[-0.25,0.25])的点,再绘制到子图中。

修改后的完整代码

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

m = 0.5
g = 0
time = np.linspace(-100, 100, 2000)

def system(phi, t):        #differential equation function
    phi_1 = phi[0]
    phi_2 = phi[1]
    dphi1_dt = phi_2
    H = np.sqrt((8 * np.pi / 3) * (0.5 * (phi_2**2)) + (0.5 * (phi_1**2) * m**2) + (g * (phi_1**3)))
    dphi2_dt = (-3 * H * phi_2) - (phi_1 * m**2) - (3 * g * phi_1**2)
    dphi_dt = [dphi1_dt, dphi2_dt]
    return dphi_dt

init = [[-2, -2], [-1, -2], [0, -2], [1, -2], [2, -2],
        [2, 2], [1, 2], [0, 2], [-2, 2], [-1, 2],
        [-3, -2], [-4, -2], [3, -2], [4, -2], [-3, 2],
        [-4, 2], [3, 2], [4, 2]]        # 移除了重复的初始条件

# 先绘制主图
for i in init:
    phi = odeint(system, i, time)
    plt.plot(phi[:, 0], phi[:, 1])

# 创建子图并绘制放大区域的解
sub_axes = plt.axes([.6, .6, .25, .25])
# 定义放大区域的范围
x_min, x_max = -0.25, 0.25
y_min, y_max = -0.25, 0.25

# 重新遍历初始条件,筛选每个解中落在放大区域的点
for i in init:
    phi = odeint(system, i, time)
    # 生成筛选掩码:只保留落在目标区域内的点
    mask = (phi[:, 0] >= x_min) & (phi[:, 0] <= x_max) & (phi[:, 1] >= y_min) & (phi[:, 1] <= y_max)
    # 提取符合条件的点并绘制到子图
    sub_axes.plot(phi[mask, 0], phi[mask, 1], c='k')

# 设置坐标轴标签和刻度
plt.xlabel("$\phi$", fontsize=12)
plt.ylabel("$d \phi/dt$", fontsize=12)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
# 给子图设置范围,确保只显示目标区域
sub_axes.set_xlim(x_min, x_max)
sub_axes.set_ylim(y_min, y_max)

plt.show()

关键修改说明

  1. 移除重复初始条件:原init列表中有多个重复的初始值,比如[-2,-2]、[0,2],移除后不影响结果且更高效。
  2. 筛选放大区域的点:通过布尔掩码mask,从每个微分方程的解phi中提取出同时满足phi1和phi2在目标区间内的点,确保子图只显示解的局部细节。
  3. 固定子图坐标轴范围:用sub_axes.set_xlim和sub_axes.set_ylim锁定放大区域,避免子图自动缩放导致偏离预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:53