2017-12-18 4 views
0

私はプランク法を統​​合してステファンボルツマン法をプロットしようとしています。 1つの温度、例えばT = 3000を設定すると、コードはその統合をうまく作ります。しかし、Tをnp.array([310,3000,5800,15000])のような配列にすると、コードがエラーになります。添付されたイメージは私が再現しようとしているプロットです。この問題を解決するための洞察力を持っている人なら誰でも、それは非常に認められるでしょう。前もって感謝します。あなたが個別に各温度のための統合を行う必要があるだろうアレイとの再帰的統合 - Stefan Boltzmann法

import matplotlib.pyplot as plt 
import numpy as np 

h = 6.626e-34 
c = 2.9979e+8 
k = 1.38e-23 
T=np.array([310,3000,5800,15000]) 

from scipy.integrate import quad 
def integrand(wav): 
    return (2.0*3.14*h*c**2)/ (((wav*1e3*1e-9)**5) * (np.exp(h*c/(wav*1e3*1e-9*k*T)) - 1.0))*1e-6 

power, err = quad(integrand, 0.01, 100) 
print(power) 

Stefan Boltzmann law by Methamatica

+0

あなたは、一度に複数の温度のための方程式を統合しようとしていますか?これが意味をなさないかどうかわかりませんが、むしろ各温度ごとに別々に行ってください。 – ImportanceOfBeingErnest

+0

はい、私はすぐに計算をしようとしています。長いコードを避けようとしています。すなわち、繰り返す...私はPythonの新しい学習者です。より洗練された方法でコードを書くことができれば、教えてください。あなたのコメントをありがとうございました。 – mocs

+0

私の初期の計画は、いったん統合の数を得た後、補間してSB法プロットを作成することでした。 – mocs

答えて

1

import matplotlib.pyplot as plt 
import numpy as np 
from scipy.integrate import quad 

h = 6.626e-34 
c = 2.9979e+8 
k = 1.38e-23 
temps=np.linspace(300,15000) 


def integrand(wav,T): 
    return (2.0*3.14*h*c**2)/ (((wav*1e3*1e-9)**5) * (np.exp(h*c/(wav*1e3*1e-9*k*T)) - 1.0))*1e-6 

p = lambda T: quad(integrand, 0.1, 100, args=(T,))[0] 

powers = list(map(p, temps)) 
plt.plot(temps, powers) 
plt.xlabel("Temperature [K]") 
plt.ylabel("Power") 

plt.show() 

enter image description here

+0

これは私が探していたものです。手伝ってくれてどうもありがとう。私はあなたの専門知識から学びました。 – mocs