用一些参数绘制误差函数

时间:2017-04-15 02:57:03

标签: 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()

我想想象一下我们玩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

我怎样才能完成任务?

2 个答案:

答案 0 :(得分:4)

在仔细查看代码后,我看到你在第一个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)]

完成后,您应该得到以下数字:

fig1

答案 1 :(得分:1)

w1 = np.linspace(-6,9,11)

绘图错误功能

l = 0
it = len(x)
for i in range(it):
    l+=(w1*x[i]- y[i])**2

plt.plot(w1,l)
plt.xlabel('W')
plt.ylabel('Error')
plt.title('W vs Error')
plt.scatter(w1,l,c='red')
plt.show()