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

用pyplot绘制csc(x)原函数无图像?求原因及解决方法

问题原因及修复方法

原因分析

你写的函数表达式log(cos(x)-1)/2 - log(cos(x)+1)/2在实数域内完全没有有效定义:

  • cos(x)的取值范围是[-1, 1],因此cos(x)-1的取值范围是[-2, 0],而numpy的log函数仅支持正实数输入,对非正数会返回nan(实数运算模式下)。
  • 整个func数组的所有元素都是nan,matplotlib不会绘制任何nan点,因此窗口打开后没有绘图内容。

而你测试的log(cos(x)+1)/2能正常绘图,是因为cos(x)+1的取值范围是[0, 2],仅当cos(x) = -1(即x=π+2kπ)时为0,其余点都是正实数,因此大部分位置有有效数值,能被matplotlib绘制。

修复方法

csc(x)的正确原函数是ln|tan(x/2)| + C,你可以通过添加绝对值修正表达式,让对数的自变量为正实数:

方法1:修正原表达式

给对数的自变量加上绝对值,确保输入为正:

from numpy import *
import matplotlib.pyplot as plt

x = linspace(-100, 100, 200000)
# 带绝对值的正确表达式
func = log(abs(cos(x)-1))/2 - log(abs(cos(x)+1))/2
plt.plot(x, func)
plt.show()

方法2:使用简化等价表达式

直接用更简洁的等价形式log(abs(tan(x/2))),结果完全一致:

from numpy import *
import matplotlib.pyplot as plt

x = linspace(-100, 100, 200000)
func = log(abs(tan(x/2)))
plt.plot(x, func)
plt.show()

补充说明

  • 当x取kπ(k为整数)时,csc(x)本身无定义,因此这些位置的函数值仍为nan,matplotlib会自动跳过这些点,不影响整体图像显示。
  • 如果你需要更清晰的图像,可以调整x的范围(比如缩小到[-10,10]),或者添加网格、坐标轴标签辅助观察。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:47