函数y=math.exp(-(1/(x**2)))绘图无法居中零点问题求助
解决函数图像居中零点的问题
你的代码存在两个核心问题,导致图像无法以零点为中心显示,以下是针对性的解决方法:
1. 让x轴对应真实自变量值
你当前调用plt.plot(values)时只传入了y值,matplotlib会默认用从0开始的整数索引作为x轴坐标,这就把原本的x=-5到4映射成了0到9,自然无法在零点居中。必须同时传入实际的x数组和y数组进行绘图。
2. 正确规避x=0并优化函数计算
当x=0时,1/(x**2)会触发除以零错误;另外用numpy的向量化计算替代循环,不仅效率更高,还能更方便地处理数组操作。
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt # 用numpy向量化实现函数,处理x=0的情况 def f(x): # 初始化y数组,x→0时函数极限为0,直接给x=0的位置赋值0 y = np.zeros_like(x, dtype=np.float64) # 筛选出非零x的索引 non_zero_mask = x != 0 # 对非零x计算函数值 y[non_zero_mask] = np.exp(-1 / (x[non_zero_mask] ** 2)) return y # 生成均匀分布的x点:-5到5之间取1000个点,保证图像平滑 x = np.linspace(-5, 5, 1000) y = f(x) # 传入x和y绘制图像,确保x轴对应真实自变量 plt.plot(x, y) plt.grid(True, axis='both') # 设置标题(用LaTeX格式让表达式更规范)和轴标签 plt.title(r"$y = e^{-1/x^2}$") plt.xlabel("x") plt.ylabel("y") # 手动锁定x轴范围(可选,matplotlib通常会自动适配) plt.xlim(-5, 5) plt.show()
关键改动说明
- 用
np.linspace替代np.arange生成x点:linspace会在指定区间内生成均匀分布的点,更适合绘制连续函数,避免因step设置导致的点分布不均。 - 通过掩码
x != 0避开零值,直接给x=0的位置赋值函数极限0:数学上x趋近于0时,e^{-1/x²}的极限就是0,这样既避免报错,也符合函数的真实形态。 - 绘图时同时传入x和y数组:让x轴对应真实的自变量值,自然会以零点为中心显示。
内容的提问来源于stack exchange,提问作者ZeroDarKoffee
相关产品推荐
相关产品推荐

