如何用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,提问作者Иван Шакура
相关产品推荐
相关产品推荐

