0

我试图找到这个问题的答案,也许它很容易,这就是为什么我不能。

如果我已经制作了一个高斯函数并且我想用 Matplotlib.pyplot.plot 来绘制它,我该如何使用浮点值来做到这一点。即 -20<=x<=20 的值,增量为 0.1

import matplotlib.pyplot as plt
import math
from math import exp
import numpy

#Parameters for the Gaussian 
A=1
c=10
t=0
a=1
x=[]

p=-20.
while p<=20:
    x.append(p)
    p+=0.1

def Gaussian(A,c,t,a,x):
    return A*exp(-((c*t-x)^2 /(4*a*c^2)))

plt.plot(x,Gaussian(A,c,t,a,x))
plt.show()

我得到的错误是:

Traceback (most recent call last):
  File "C:--------/Gaussian Function.py", line 21, in <module>
    plt.plot(x,Gaussian(A,c,t,a,x))
  File "C:--------/Gaussian Function.py", line 19, in Gaussian
    return A*exp(-((c*t-x)^2 /(4*a*c^2)))
TypeError: unsupported operand type(s) for -: 'int' and 'list'
4

2 回答 2

4

该问题与matplotlib无关。如果您根本Gaussian(A, c, t, a, x)不使用 matplotlib 就调用,您将得到相同的错误。您的函数接受一个x列表参数,然后尝试执行类似c*t-x. 你不能从一个数字中减去一个列表。正如错误消息所暗示的那样,您可能应该创建x一个 numpy 数组,这将允许您对其执行这些类型的矢量化操作。

于 2013-11-03T00:05:35.200 回答
2

您的代码中有一些错误。更正后的如下:

import matplotlib.pyplot as plt
import numpy as np

#Parameters for the Gaussian 
A, c, t, a = 1, 10, 0, 1
x = np.arange(-20,20,0.1)                       #use this instead

def Gaussian(A,c,t,a,x):
    return A*np.exp(-((c*t-x)**2/(4*a*c**2)))   #power in Python is ** not ^

plt.plot(x,Gaussian(A,c,t,a,x))
plt.show()

结果是:

在此处输入图像描述

于 2013-11-03T09:19:55.017 回答