2017-06-06 2 views
0

Je suis novice en python et j'essaie d'obtenir la loi stefan boltzmann en intégrant analytiquement la loi de Plancks. Jusqu'à présent, je tracé les courbes de rayonnement du corps noir, mais je suis coincé sur la façon d'intégrer patchage est ma fonction:Comment pouvez-vous intégrer la loi de planck pour que Stefan-Bolzmann utilise python?

import numpy as np 
h=6.626e-34 
c=3.0e+8 
k=1.38e-23 

def planck(x,T): 
    a=2.0*h*c**2 
    b=(h*c)/*x*k*T) 
    intensity= a/((x**5)*(np.exp(b)-1.0) 
    return intensity 

pour l'intégrer i essayé d'utiliser sympy comme ceci:

from sympy import * 
x=Symbol('x') 
T=Symbol('T') 
integrate((x**3)/(exp(x)-1)) 

mais il ne peut pas faire l'intégration. Je suis sûr qu'il y a une simplification que je suis censé faire mais je ne sais pas comment.

+0

Veuillez corriger votre ligne 'b ='. À quel point êtes-vous convaincu qu'une expression intégrale symbolique existe? http://www.wolframalpha.com/input/?i=integral+of+x^3%2F%28exp%28x%29-1%29 utilise des fonctions spéciales, polylogarithmes, qui ne sont probablement pas supportées par Sympy. – LutzL

Répondre

1

Pour passer de la loi de Plancks à la loi de Stefan-Boltzmann, vous devez intégrer toutes les fréquences (1). Ainsi, vous avez besoin d'une intégrale définie:

integrate((x**3)/(exp(x)-1),(x,0,oo)) 

L'intégration est here détaillée. La fonction zeta de Riemann peut être utilisé dans sympy:

n = symbols('n') 
riemann_zeta = functions.special.zeta_functions.zeta(n,1) 

mais bien sûr, il n'y a pas de dépendance de x plus. Malheureusement sympy ne peut pas transformer l'intégrale de l'expression analytique:

x = symbols('x', real=True, negative=False) 
pprint(simplify(integrate((x**3)/(exp(x)-1),(x,0, oo)))) 

va juste donner $ \ int_0^\ infty \ frac {x^3} {e^x-1} dx $ et $ \ zeta (4) \ Gamma (4) = \ frac {\ pi^4} {15} $. (Désolé pour le LaTeX ...)

+0

Je suis encore un peu confus sur la façon d'utiliser la fonction riemann zeta. Dois-je l'importer de Sympy en premier? et donc je l'ai mis avant que j'appelle l'intégration ou après? –

+0

Vous pouvez utiliser la fonction riemann zeta comme indiqué dans la réponse, ou essayez 'functions.special.zeta_functions.zeta (4,1)', mais comme je l'ai dit avant, sympy ne peut pas transformer l'intégrale de la fonction riemann zeta ni évaluer l'intégrale . La fonctionnalité semble simplement ne pas encore être implémentée. – Hannebambel

+0

d'accord, merci. Savez-vous comment ajouter un marqueur aux sommets des courbes? J'ai essayé d'utiliser 'from scipy.signal import find_peaks_cwt' puis 'indexes = find_peaks_cwt (intensité3000, np.arange (1e-9,3e-6)) plt.plot (index)' –