Mon*_*ica 0 python math matplotlib
我正在尝试以以下形式绘制错误函数:
#!/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()
Run Code Online (Sandbox Code Playgroud)
我想想像一下当我们使用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
Run Code Online (Sandbox Code Playgroud)
我如何完成任务?
在仔细查看代码后,我发现在您的第一个for循环中,您将其用作虚拟变量x。然后,您的下一行代码是x = np.arange(-2,2,0.2),您全局定义x为numpy.ndarray。然后,您将x在第二个for循环中全局定义的对象用作damp(A2,x,r2)和变量的参数,在尝试绘制它们时会给您该错误。显然,Python3对此没有任何问题,并且可以正常运行该程序。
要解决此问题,请x在第二个for循环中用另一个虚拟变量替换:
g2 = [ norm_constant(A2,r2) *damp(A2,z,r2) for z in np.arange(-2,2,0.2)]
Run Code Online (Sandbox Code Playgroud)
完成后,您将获得下图:
| 归档时间: |
|
| 查看次数: |
669 次 |
| 最近记录: |