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

Python课程作业:如何基于输出数据绘制Ce-t曲线图?

问题分析与修正方案

核心问题点

  • 绘图变量错误:循环里用plt.plot(t, Ce),但Ce是初始定义的0,不是每次求解得到的Ce_solution;而且单调用plt.plot画单个点默认无显示(既无线条也无标记)。
  • 函数未动态更新:func定义在循环外,后续循环中qm被更新为qe,但func内部的qm仍保持初始值,导致每次求解的Ce_solution结果错误。
  • 未积累数据点:没有保存每次循环的t和Ce值,无法形成完整的曲线数据。

修正后的代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve

%matplotlib inline

# 给定参数
F = 150 
M = 70 
Co = 350 
init_guess = Co / 10
qm = 246 
KL = 0.0026 
q_prior = 0 

# 用于存储数据的列表
t_list = []
ce_list = []

count = 1
while count < 21:
    t = 60 * 70 / 150 * count  # 即28*count
    # 每次循环重新定义func,确保使用最新的qm值
    func = lambda Ce: (Co - Ce) * F / (1000 * M) + q_prior - qm * KL * Ce / (1 + KL * Ce)
    # 求解Ce,提取数组中的标量值
    Ce_solution = fsolve(func, init_guess)[0]
    # 计算qe
    qe = qm * KL * Ce_solution / (1 + KL * Ce_solution)
    # 保存当前数据点
    t_list.append(t)
    ce_list.append(Ce_solution)
    # 打印当前数据
    print(f'Ce {Ce_solution:.4f}, qe {qe:.4f}, t {t:.0f}')
    # 更新qm为当前qe,用于下一次循环
    qm = qe
    count += 1

# 绘制完整曲线
plt.plot(t_list, ce_list, marker='o', linestyle='-', color='b')
plt.xlabel('时间t')
plt.ylabel('Ce')
plt.xlim([0, 560])
plt.ylim([0, 350])
plt.title('Ce-t曲线图')
plt.grid(True)
plt.show()

修正说明

  1. 数据存储与绘图优化:用t_list和ce_list积累每次循环的时间和Ce值,最后一次性绘制完整曲线;添加marker='o'让数据点可见,同时保留连线。
  2. 动态更新求解函数:将func移到循环内部,每次循环都使用最新的qm值,保证求解逻辑符合迭代要求。
  3. 标量值提取:fsolve返回数组,用[0]提取标量值,避免后续数据处理出现类型问题。
  4. 图表可读性优化:添加坐标轴标签、标题和网格,让图表更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:43:16