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ます。数値からリストを引くことはできません。エラー メッセージが示唆するように、おそらくxnumpy 配列を作成する必要があります。これにより、これらの種類のベクトル化された操作を実行できるようになります。

于 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 に答える