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

函数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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:43:35