Python som lommeregner med pakken scipy for symbolsk, analystisk CAS se næste side om sympy.
Med Scipy kan du:
bruge nemt fysiske konstanter
bruge alle pythons almindelige funktioner såsom plottefunktioner fra matplotlib, loops, random, lineær regression osv
løse bestemte integraler numeriske
integrere beregningerne i andre pythonprogrammer
Det er smart at bruge scipy i både
Spyder og Jupyter.
Installation af Jupyter har sin egen side.
Som hurtig lommeregner eller CAS system er det klart bedst at bruge Jupyter i stedet for Spyder. Spyder virker selvfølgelig også men det er jo ikke programmer vi skal skrive, men lave hurtige beregninger og der er Jupyter Notebook bare smart og fikst.
Du åbner et nyt "notebook" ved at klippe på "JupyterLab" i Anaconda så åbnes der et browservindue hvor du væger:
"New --> Python 3" i jupyter.
Har du problemmer med at få Jupyter til at virke klik her.
Jeg regner med at du har programmet oppe at køre sådan at det ligner billedet her til højre. Hvis ikke det virker og den ikke kan regne så prøv at klikke på denne her side.
Tryk på "run" knappen eller bare CTRL + Enter på windows og MAC
5+5=10 .. super det virker
Trykker du "enter" i øverste vindue får en ny linje. Klar til programmering
variablen a = 5+5. Trykker du enter nu har python læst 10 ind i variablen a .. den skal printes før du kan se output.
Du kan selvfølgelig bruge alle pythons funktioner.
5+5, 5 - 1, 4/2, 3*3 ,sin(x) cos(x) osv giver sigselv. Husk parenteser!
x**2 er x^2.
Pakken scipy indeholder mange konstanter.
En liste er her (i listen er de importeret som sc)
De KAN importeres alle direkte til python vha
from scipy.constants import *
#jeg anbefaler dog import scipy.constants as sc
Det er smart siden vi nu har adgang til konstanterne direkte fx kan vi beregne energitilstande i et hydrogenatom vha bors formel ved at skrive formlen direkte ind.
-1/(4*pi*epsilon_0)**2*m_e*e**4/(2*hbar**2*e)
- 13,6eV .. genialt.
Læg mærke til at det sidste e omregner fra joule til eV
Når du skriver from scipy.constants import * så importerer du alle konstanter direkte. Det har det ulempe at der er mange bogstaver som ikke længere kan bruges som variabler og man ikke rigtig kan vide hvilke konstanter der er brugt. Løsningen er at skrive følgende
import scipy.constants as sc
Ovenstående formlel bliver selvfølgelig nu noget andet
-1/(4*sc.pi*sc.epsilon_0)**2*sc.m_e*sc.e**4/(2*sc.hbar**2*sc.e)
Lidt længere ... :-) men fordelen er at alle konstanter starter med sc.konstant.
import scipy.constants as sc
print('e = ',sc.e) #elektronens ladning
print('h = ',sc.h) #plancks konstant
print('hbar = ',sc.hbar) # plancks konstant /2pi
print('m_e = ',sc.m_e) # elektronens masse
print('my-0 = ',sc.mu_0) #magnetic constant
print('m_p = ',sc.m_p) # protonens masse
print('m_n = ',sc.m_n) # neutronens masse
print('pi = ',sc.pi) # pi
print('G = ',sc.G) # Gravitatioinal constant
print('Boltzmann',sc.k)
print('Rydberg = ',sc.Rydberg)
print('NA = ',sc.Avogadro) # Avogadros tal mol
print('alfa-p-masse =',sc.physical_constants['alpha particle mass'][0])
Læg mærke til forskellen
from scipy.constants import *
importerer alle konstanter dirket c, e, hbar osv
import scipy.constants as sc
importerer indirekte sc.c, sc.e, sc.hbar osv
Man får et problem hvis man importerer konstanterne direkte: sp.c vil forblive lysets hastighed, men konstanten c ved direkte import kan redefineres ved en fejl.
Og hvis man bruger et loop kan man hurtig regne flere energiniveauer ud.
Så længe du bruger scipy, numpy og matplotlib gælder ALLE almindelige python definitioner. Bruger du sympy forgår plot på en anden måde!
ALT hvad der kører i Spyder kører også i Jupyter. Du kan klippe kode direkte fra det ene program til det andet. Matplotlib er også her det ultimative plotteprogram.
I eksemplet til højre er x og y lister.
Lister er ikke gode til at arbejde med når man skal manipulere de enkelte elementer.
Se løsningen nedenunder lavet med numpy.
np.linspace danner en array (liste med tal) fra 0 til 10 med 100 elementer.
Tilbage til ovenstående eksempel med energiniveauer i hydrogenatomet:
import scipy.constants as sc
import matplotlib.pyplot as plt
x = []
y = []
for i in range (1,20):
En=-1/(4*sc.pi*sc.epsilon_0)**2*sc.m_e*sc.e**4/(2*sc.hbar**2*i**2*sc.e)
x.append(i)
y.append(En)
plt.scatter(x,y)