在同一图中绘制函数、其一阶导数和不定积分时遇到困难
我正在尝试在Python中复现一个之前在Matlab中做的图表,这个图表上有三个函数在同一个xy坐标轴上。
一条红线表示函数y=1/(1+(x^2)),一条蓝线表示它的第一个导数,绿色的线表示它的不定积分。
我在两个方面遇到了问题:
1) 我尝试了几种不同的方法,但一直无法把y轴的范围设置为-1.5到1.5。
2) 当我尝试绘制第三条线,也就是积分时,出现了错误“ValueError: x and y must have same first dimension”。
正如你在下面的代码中看到的,我实际上使用的是从负无穷到正无穷的定积分,因为我也不知道怎么写不定积分。所以如果你能在这方面提供帮助,那就太好了。
from scipy.misc import derivative as deriv
import numpy as np
import scipy.integrate as integ
import pylab as pyl
f = lambda x : 1 / (1 + x**2)
x = np.arange(-10, 10, 0.01)
d = deriv(f,x)
i = integ.quad(f,-np.inf,np.inf)
pyl.plot(x,f(x),'r-')
pyl.plot(x,d,'b-')
pyl.plot(x,i,'g-')
pyl.ylim(-1.5,1.5)
pyl.show()
从代码生成的图表显示了正确的红色和蓝色函数,但y轴显然不太对,绿色的函数没有显示(因为之前提到的错误)
我非常感谢任何人能提供的帮助。
1 个回答
1
你似乎在错误地使用 scipy.integrate.quad
这个函数。这个函数是用来计算两个数之间的定积分的。从文档中可以看到:
>>> f = lambda x,a : a*x
>>> y, err = integrate.quad(f, 0, 1, args=(1,))
>>> y
0.5
所以它会返回一个元组,里面包含了积分的值和这个值的误差。你现在是想把这个元组和 x = np.arange(-10, 10, 0.01)
这个数组一起画图。很明显,元组和数组的大小不一样,所以你不能把这些数据一起画出来。
如果你想在所有指定的 X 坐标上画一条与积分值相等的直线,你可以使用:
pyl.hlines(i[0],x[0],x[-1])