如何用Python绘制f(x)=x^(2/3)的负数区间图像?
问题:绘制函数f(x)=x^(2/3)时无法显示负x区间图像
我想要使用Python绘制函数f(x) = x^(2/3)的图像,但目前仅能成功绘制x取正值的部分,运行代码时还出现警告,请问哪里出错了?
我的代码
import numpy as np import matplotlib.pyplot as plt # 定义函数 def f(x): return x ** (2/3) # 生成正负x的取值 x_positive = np.linspace(0, 10, 200) x_negative = np.linspace(-10, 0, 200) # 计算对应的y值 y_positive = f(x_positive) y_negative = f(x_negative) # 绘图 plt.figure(figsize=(8, 6)) # 绘制正x区间曲线 plt.plot(x_positive, y_positive, label=r'$f(x) = x^{2/3}$', color='blue') # 绘制负x区间曲线 plt.plot(x_negative, y_negative, linestyle='dashed', color='blue') plt.title('f(x) = x^(2/3)') plt.xlabel('x') plt.ylabel('f(x)') plt.grid(True) plt.legend() plt.ylim(-10, 10) plt.xlim(-10, 10) plt.axhline(y=0, color='black', linewidth=0.8) # 绘制x轴 plt.axvline(x=0, color='black', linewidth=0.8) # 绘制y轴 plt.show()
运行警告
C:\Users\...\AppData\Local\Temp\ipykernel_35264\1241025677.py:3: RuntimeWarning: invalid value encountered in power return x ** (2/3)
问题原因
在NumPy中,直接对负数使用浮点数次幂(比如2/3)会触发计算异常:x ** (2/3)等价于x^0.666...,NumPy会尝试按复数规则计算,但默认不会返回复数结果,最终生成nan(无效值),导致负x区间的图像无法绘制。
实际上x^(2/3)在实数域的定义是先对x取平方,再开三次方,结果始终为非负数,和x的正负无关。
解决方案
修改函数的实现方式,按照实数域的定义来计算:
方法1:先平方再开三次方
利用np.cbrt()函数(计算三次方根),先对x平方再开三次方:
def f(x): return np.cbrt(x ** 2)
方法2:取绝对值后计算幂次
因为x^(2/3) = |x|^(2/3),也可以这样写:
def f(x): return np.abs(x) ** (2/3)
修改后的完整代码
import numpy as np import matplotlib.pyplot as plt # 修正后的函数 def f(x): return np.cbrt(x ** 2) # 直接生成包含正负的x数组 x = np.linspace(-10, 10, 400) y = f(x) # 绘图 plt.figure(figsize=(8, 6)) plt.plot(x, y, label=r'$f(x) = x^{2/3}$', color='blue') plt.title('f(x) = x^(2/3)') plt.xlabel('x') plt.ylabel('f(x)') plt.grid(True) plt.legend() plt.ylim(0, 5) # 函数值非负,调整y轴范围更合理 plt.xlim(-10, 10) plt.axhline(y=0, color='black', linewidth=0.8) plt.axvline(x=0, color='black', linewidth=0.8) plt.show()
这样修改后,就能正常显示x负区间的图像,也不会出现警告了。
内容的提问来源于stack exchange,提问作者smdr
相关产品推荐
相关产品推荐

