Python 如何在Matplotlib中绘制算术和自然对数函数?

Python 如何在Matplotlib中绘制算术和自然对数函数?,python,matplotlib,math,jupyter-notebook,Python,Matplotlib,Math,Jupyter Notebook,我试图在matplotlib中为1绘制这两个函数第一个函数可以绘制如下: 从matplotlib导入pyplot作为plt 将numpy作为np导入 k=np.arange(110001) g=np.log(k) f=g.cumsum() 平面图(k,f) plt.show() 如注释中所述,第二个函数可以通过np.log(scipy.special.factorial(k))绘制到k=170。对于k=171而言,阶乘大于64位浮点中可以表示的最高数字 要获取较大的k,可以使用pythons

我试图在matplotlib中为1绘制这两个函数第一个函数可以绘制如下:

从matplotlib导入pyplot作为plt
将numpy作为np导入
k=np.arange(110001)
g=np.log(k)
f=g.cumsum()
平面图(k,f)
plt.show()

如注释中所述,第二个函数可以通过
np.log(scipy.special.factorial(k))
绘制到
k=170
。对于
k=171
而言,阶乘大于64位浮点中可以表示的最高数字

要获取较大的
k
,可以使用pythons多精度数学库
mpmath
。mpmath比numpy慢得多,并且不在数组上运行,因此需要进行一些转换

下图显示了
f1
f2
之间的差异,但假定舍入误差大于这些差异:

从matplotlib导入pyplot作为plt
将numpy作为np导入
从mpmath导入mp、fac、日志
k=np.arange(110001)
f1=np.log(k).cumsum()
f2=np.数组([log(fac(ki))表示k中的ki])
平面图(k,f1-f2)
plt.show()

以高精度计算一切,似乎表明两者完全相同:

从matplotlib导入pyplot作为plt
从mpmath导入mp、fac、日志
mp.dps=500#默认精度约为15位,此处使用500
k=范围(11001)
g=[k中ki的log(ki)]
f1=[]
s=0
对于gi in g:
s+=gi
f1.追加
f2=[k中ki的log(fac(ki)]]
f12=[f1i-f2i表示压缩中的ki、f1i、f2i(k、f1、f2)]
平面图(k,f12)
plt.show()

这非常缓慢,最后显示一条完整的水平线,表明差异小于最小的可表示数字。从数学上讲,两者完全相等是有道理的。

欢迎来到堆栈溢出。不幸的是,这不是一个代码编写或教程服务,“有人为我编写代码”不是一个有效的问题。请提供一份基于您自己的研究到目前为止您所做的尝试,以及您遇到的具体困难。
plt.plot(k,np.log(scipy.special.factorial(k))
第二次。
scipy.special.factorial(k)
似乎只在
k=170之前有效。
谢谢!我真的很抱歉,但是上面说“scipy”没有定义。我需要进口什么吗?@JohanC是这样吗?有没有办法让它工作到10000?我添加了行import scipy,但它不工作。。。Idk为什么会这样