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

Python中用for循环在同一画布绘制多参数参数图求助

问题修正方案

你的代码存在几个关键问题,导致只能得到b=4的图,下面是修正说明和完整代码:

核心错误点

  1. 循环逻辑错误:你在循环内反复将b赋值为整个数组,没有逐个使用每个b值;且np.arange(4,6,0.5)无法取到6,需调整为np.arange(4,6.1,0.5)才能包含目标值。
  2. 微分方程参数错误:F函数里错误使用len(b)**2代替b**2,原数组长度为4,所以始终用1/4²计算,相当于固定b=4,这是所有图结果一致的根本原因。
  3. 绘图逻辑错误:每次循环新建画布并立即显示,导致每次仅展示单张图,无法在同一画布叠加。

修正后的代码

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

alpha = 0.2
M = 1

# 定义要测试的5个b值
b_values = np.arange(4, 6.1, 0.5)

# 创建单个画布,设置统一坐标轴范围
plt.figure(figsize=(6,6))
plt.xlim(-16,16)
plt.ylim(-16,16)

for b in b_values:
    # 针对当前b值定义微分方程
    F = lambda t, r: (r**2 * ((1/b**2) - ((1 - (2*(1+alpha)*M)/ r + (alpha*(1+alpha)*M**2)/ (r**2))/r**2)))**0.5
    
    t_eval = np.arange(0, 2*np.pi, 0.0001)
    # 求解数值积分
    sol = solve_ivp(F, [0, 2*np.pi], [2.3], method='RK45', t_eval=t_eval)
    
    # 转换为直角坐标
    x3 = sol.y[0] * np.cos(sol.t)
    y3 = sol.y[0] * np.sin(sol.t)
    
    # 绘制曲线并添加标签
    plt.plot(x3, y3, label=f'b={b}')

# 添加图例区分不同曲线
plt.legend()
plt.show()

修正说明

  • 循环直接遍历每个b值,确保每次计算都使用当前目标参数。
  • 将画布创建、坐标轴设置放在循环外,所有曲线绘制在同一画布上。
  • 为每条曲线添加标签,通过图例清晰区分不同b对应的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:11:15