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

使用Matplotlib复现动画仅显示右半部分,求错误排查

问题排查:Matplotlib绘制函数仅显示右半部分

你尝试用Matplotlib复现动画,但当前绘制的图像仅显示右半部分(如图):
仅显示右半部分的函数图像

你的代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from math import e, pi, sin

def f(x, a):
   x = np.clip(x, -np.sqrt(np.pi), np.sqrt(np.pi))
   return x**(2/3) + e/3 * np.maximum (0, (pi - x**2)**0.5) * np.sin(a * pi * x)

fig, ax = plt.subplots()
x = np.linspace(-2, 2, 400)
line, = ax.plot(x, f(x, 0), lw=2, color='red')  
ax.set_xlim([-2, 2])
ax.set_ylim([-1.5, 2.5])
ax.set_xlabel('x')
ax.set_ylabel('f(x)')
ax.set_title('f(x) = x^(2/3) + e/3*(π-x^2)^1/2*sin(a*π*x)')

def update(a):

  line.set_ydata(f(x, a))  
  ax.set_title(f'f(x) =  x^(2/3) + e/3*(π-x^2)^1/2*sin({a:.1f}πx)')
  return line,


frames = np.arange(0, 20, 0.05)
ani = animation.FuncAnimation(fig, update, frames=frames, interval=10, blit=True)


plt.show()

问题根源

核心问题出在x**(2/3)的计算逻辑上:
在numpy中,当x为负数时,直接计算x**(2/3)会返回NaN。这是因为分数次幂的底层计算会先处理开方步骤,负数开平方会得到虚数,numpy默认将其转换为NaN,导致左半部分的函数值全部无效,最终图像只显示右半部分。

解决方法

将x**(2/3)替换为np.sign(x) * np.abs(x)**(2/3)。这个逻辑先对x取绝对值计算幂次,再乘上x的符号,既能保证计算结果的正确性,又能覆盖负数的情况。

修改后的完整代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from math import e, pi, sin

def f(x, a):
    x = np.clip(x, -np.sqrt(np.pi), np.sqrt(np.pi))
    # 修正负数的2/3次幂计算
    x_pow = np.sign(x) * np.abs(x)**(2/3)
    return x_pow + e/3 * np.maximum(0, (pi - x**2)**0.5) * np.sin(a * pi * x)

fig, ax = plt.subplots()
x = np.linspace(-2, 2, 400)
line, = ax.plot(x, f(x, 0), lw=2, color='red')  
ax.set_xlim([-2, 2])
ax.set_ylim([-1.5, 2.5])
ax.set_xlabel('x')
ax.set_ylabel('f(x)')
ax.set_title('f(x) = x^(2/3) + e/3*(π-x^2)^1/2*sin(a*π*x)')

def update(a):
    line.set_ydata(f(x, a))  
    ax.set_title(f'f(x) =  x^(2/3) + e/3*(π-x^2)^1/2*sin({a:.1f}πx)')
    return line,

frames = np.arange(0, 20, 0.05)
ani = animation.FuncAnimation(fig, update, frames=frames, interval=10, blit=True)

plt.show()

内容的提问来源于stack exchange,提问作者Roche Lynn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 17:48:08