我正在尝试以以下形式绘制错误函数:
#!/usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np
import math
from scipy.special import erf
from scipy.integrate import quad
import scipy.integrate as integrate
def integrand(t, alpha, r ):
return np.exp(-alpha*(t-r)**2)
def damp(alpha, rho, r):
return quad(integrand, 0, rho, args=(alpha, r))[0]
def norm_constant(alpha, r):
return 2.0*math.sqrt(2)/math.sqrt(math.pi) * (1./(1.- erf(-math.sqrt(np.abs(alpha))*r)))
A = 1.5
r = 0.3
g = [ norm_constant(A,r) *damp(A,x,r) for x in np.arange(-2,2,0.2)]
x = np.arange(-2,2,0.2)
A2 = 1.8
r2 = 0.3
g2 = [ norm_constant(A2,r2) *damp(A2,x,r2) for x in np.arange(-2,2,0.2)]
plt.plot(x,g,'r')
plt.plot(x,g2,'b')
plt.show()
我想想像一下当我们使用Alpha和r时误差函数是如何变化的。但是,我得到的错误信息是:
plt.plot(x,g,'r')
File "/usr/local/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3154, in plot
ret = ax.plot(*args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/matplotlib/__init__.py", line 1812, in inner
return func(ax, *args, **kwargs)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_axes.py", line 1424, in plot
for line in self._get_lines(*args, **kwargs):
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 386, in _grab_next_args
for seg in self._plot_args(remaining, kwargs):
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 364, in _plot_args
x, y = self._xy_from_xy(x, y)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 223, in _xy_from_xy
raise ValueError("x and y must have same first dimension")
ValueError: x and y must have same first dimension
我如何完成任务?
最佳答案
在仔细查看代码后,我发现在您的第一个for循环中,您将其用作虚拟变量x
。然后,您的下一行代码是x = np.arange(-2,2,0.2)
,在这里您将x
全局定义为numpy.ndarray
。然后,您将使用在第二个for循环中全局定义的相同x
作为damp(A2,x,r2)
的参数和哑变量,在尝试绘制它们时会给您该错误。显然,Python3对此没有问题,并且可以正常运行该程序。
要解决此问题,请在第二个for循环中将x
替换为另一个虚拟变量:
g2 = [ norm_constant(A2,r2) *damp(A2,z,r2) for z in np.arange(-2,2,0.2)]
完成后,您将获得下图:
关于python - 使用某些参数绘制误差函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43421711/