我正在尝试在Python中复制我之前在Matlab中创建的绘图,其中三个函数绘制在相同的xy轴上。
红线表示函数y = 1 /(1+(x ^ 2)),蓝线表示其一阶导数,绿色表示其不定积分。
我在两个方面遇到问题:
1)我尝试了几种不同的方法,但是我无法将y轴范围设置为-1.5到1.5。
2)我在尝试绘制第三行(积分)时收到错误“ValueError:x和y必须具有相同的第一维”。
正如你在下面的代码中看到的,我实际上是使用从-infinity到infinity的定积分,因为我也无法弄清楚如何写出不定积分。所以你在这里提供的任何帮助也会有所帮助。
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轴显然不是很正确,绿色功能不显示(由于前面提到的错误)
我非常感谢任何人提供的任何帮助。
答案 0 :(得分: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])