0

tdondur x 座標、y 座標 s.しかし、私はできません。あなたが助けることができれば。よろしくお願いします。tdondur 値のみが描画されるようになりました。s の値をプロットする方法。

from math import e, exp,pow 
import pylab
from gaussxw import gaussxwab

Kb=1.3806505*10**-23
V=10**-3
p=6.022*10**28
Qd=428.0


def f(x):
    isisigasi=9*V*p*Kb*(T/Qd)**3
    return(isisigasi*x**4*(exp(x))/(exp(2)-1)**2)

tut=[] 

Tdondur=range(5,501)
tut=[None for T in Tdondur] 

for tsirala, T in enumerate (Tdondur):
    N=50
    a=0
    b=Qd/T
    x,w=gaussxwab(N,a,b)
    s=0.0
    for k in range (N):
        s+=w[k]*f(x[k])    
    print(T,"'in Isı Sığası : ",s)
    print("----------------------------------------------------------")


pylab.plot(Tdondur)
pylab.title('Isı Sığasının Sıcaklığa Göre Değişimi')
pylab.xlabel('Sıcaklık (T)')
pylab.ylabel('Isı Sığası')
pylab.gcf().savefig('isisigasi.png')
pylab.show()
4

1 に答える 1

1

ここでの問題はs、ループの反復ごとに新しい値を計算しているのに、計算した値を決して保存しないことです。代わりにs、ループに入る前にfor の配列を作成しs[k]、ループ内で設定します。

from math import e, exp,pow 
import pylab
from gaussxw import gaussxwab

Kb=1.3806505*10**-23
V=10**-3
p=6.022*10**28
Qd=428.0


def f(x):
    isisigasi=9*V*p*Kb*(T/Qd)**3
    return(isisigasi*x**4*(exp(x))/(exp(2)-1)**2)

tut=[] 

Tdondur=range(5,501)
tut=[None for T in Tdondur] 

s = [0. for i in Tdondur]  # initialize s before entering the loop
for tsirala, T in enumerate (Tdondur):
    N=50
    a=0
    b=Qd/T
    x,w=gaussxwab(N,a,b)
    for k in range (N):
        s[k]+=w[k]*f(x[k])    # work on the values within the loop

pylab.plot(Tdondur, s)
#s_np = pylab.array(s)
#pylab.plot(Tdondur, pylab.log10(s_np))
pylab.title('title')
pylab.xlabel('T')
pylab.ylabel('Y')
#pylab.gcf().savefig('')
pylab.show()

結果は次のとおりです (x 軸が拡大されていることに注意してください)。

ここに画像の説明を入力

通常、このようなデータlogの場合、データをプロットする必要があります。そのためには、次の 2 行のコメントを外します。

s_np = pylab.array(s)
pylab.plot(pylab.log10(s_np))

(上記の行は、pylab でインポートされた numpy を使用していることに注意してください。このタイプの問題では、リスト内包表記よりも簡単です。)

ここに画像の説明を入力

于 2013-06-10T16:18:00.597 に答える