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

如何用matplotlib完成指定函数绘图任务?求解代码运行异常问题

问题分析与修正方案

原代码存在的问题

  • 取值范围偏差:range(100)生成0到99的整数,乘以0.1后x的范围仅到9.9,未覆盖任务要求的0到10区间,需改为range(101)才能包含10。
  • 绘图数据错误:np.arange(len(x_list))生成的是列表索引值,而非实际的x和函数取值,导致绘制的并非目标函数图像。
  • 未实现并行计算:原代码用单线程循环执行计算,不符合“迭代并行范式”的要求。

修正后的代码(含并行实现)

方案1:用concurrent.futures实现并行

import matplotlib.pyplot as plt
import numpy as np
from concurrent.futures import ProcessPoolExecutor

# 定义目标函数
def calculate_f(x):
    return x**3 + x**2

# 生成0到10区间的101个点(对应100步划分)
x_values = np.linspace(0, 10, 101)

# 并行计算每个x对应的函数值
with ProcessPoolExecutor() as executor:
    y_values = list(executor.map(calculate_f, x_values))

# 绘制函数图像
plt.plot(x_values, y_values, label=r'$f(x)=x^3+x^2$')
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('Function Plot of $f(x)=x^3+x^2$')
plt.grid(True)
plt.legend()
plt.show()

方案2:用multiprocessing实现并行

import matplotlib.pyplot as plt
import numpy as np
from multiprocessing import Pool

def calculate_f(x):
    return x**3 + x**2

if __name__ == '__main__':
    # 生成0到10区间的101个点
    x_values = np.linspace(0, 10, 101)
    
    # 进程池并行计算
    with Pool() as pool:
        y_values = pool.map(calculate_f, x_values)
    
    # 绘图
    plt.plot(x_values, y_values, label=r'$f(x)=x^3+x^2$')
    plt.xlabel('x')
    plt.ylabel('f(x)')
    plt.title('Function Plot of $f(x)=x^3+x^2$')
    plt.grid(True)
    plt.legend()
    plt.show()

关键说明

  • np.linspace(0, 10, 101)可直接生成0到10间均匀分布的101个点,比手动列表推导更简洁准确,对应100步的区间划分。
  • 并行计算通过进程池实现,将每个x的函数计算任务分配到不同进程执行,满足“迭代并行范式”要求。
  • 绘图时直接使用实际的x和函数取值,确保图像准确反映函数的变化趋势。

内容的提问来源于stack exchange,提问作者Иван Шакура

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:45:31