如何绘制计算e^-x时迭代次数n与误差errorp的关系图?
迭代次数与误差关系图的实现方案
核心问题
原代码仅在循环结束后计算最终误差,没有在每轮迭代中记录数据,导致无法生成完整的误差变化曲线。要解决这个问题,需要在每次迭代过程中实时保存迭代次数和对应误差值。
修改后的完整代码
import math import matplotlib.pyplot as plt x = float(input()) term = 1 sum_val = 1 # 避免与内置sum函数重名 n = 1 eps = 10**-7 # 初始化存储迭代数据的列表 iteration_counts = [] error_values = [] # 预先计算真实值,减少重复计算 true_exp = math.exp(-x) while abs(term / sum_val) > eps: term = -x / n * term sum_val += term n += 1 # 计算当前迭代的误差并存储 current_error = 100 - (sum_val * 100 / true_exp) iteration_counts.append(n) error_values.append(abs(current_error)) # 输出最终结果 print(f"总迭代次数: {n}") print(f"e^-x近似值: {sum_val}") print(f"最终误差: {abs(current_error)} %") # 绘制关系图 plt.figure(figsize=(10, 6)) plt.plot(iteration_counts, error_values, marker='s', linestyle='--', color='darkred') plt.xlabel('迭代次数 n') plt.ylabel('误差百分比 (%)') plt.title('迭代次数与计算误差的变化关系') plt.grid(alpha=0.3) plt.show()
关键调整说明
- 重命名
sum为sum_val:避免覆盖Python内置的sum()函数,防止后续代码出现意外问题。 - 预计算真实值
true_exp:不用在每次迭代中重复调用math.exp(-x),提升代码运行效率。 - 循环内实时记录数据:每完成一次迭代,就计算当前的误差值,并将迭代次数和误差分别追加到对应的列表中,确保所有迭代步骤的数据都被保存。
- 优化图表展示:添加标记点、调整线条样式、设置网格透明度,让图表的可读性更强。
内容的提问来源于stack exchange,提问作者Belal Bahaa
相关产品推荐
相关产品推荐

