I dette projekt arbejder du med henfaldsloven for radioaktiv henfald. Du starter med at eftervise henfaldsloven ud fra et terningekasteforsøg for at simulere tilfældig henfald. Derefter bruger du pythons random funktion til at simulere radioaktiv henfald. Du lærer at forstå henfaldskonstantens betydning og hvordan den hænger sammen med halveringstiden. Med python skal du løse en differentialligning og bruge eksponentiel regression samt en masse sjove plotfunktioner.
I fysik har du har læst lidt om
Henfaldsloven
Halveringstid og henfaldskonstant
I python forstår du
løkker (if .. else, for ... in range)
forskel på python lister og numpy arrays
Alle opgaver som starter med RA relaterer sig til terningekasteforsøget!
Du bruger to terninger og et A4 ark og en blyant.
Forstil dig nedenstående scenario hvor der er N0=30 kerner der er radioaktive.
runde 0: Alle kerner (30 styk) står med o på række klar til at henfalde.
runde 1: slå begge terninger, hvis du får to ettere (11) ELLER to toere (22) så henfalder kernen o --> x. Alle andre kombinatiner (33,44,45,52,23,66 osv) resulterer IKKE i henfald.
Henfalder en kerne: Tegn x'er hele vejen ned siden kernen nu er henfaldet og IKKE skal 'spørges' igen i næste runde.
Henfalder kernen ikke : går videre til næste kerne i din runde.
runde 2: 'spørg' igen hver tilbageværende kerne (aller o'er) om den er henfaldet skriver x'er ved alle som er.
fortsæt til du max har to kerner tilbage.
tæl kernerne og find summen af runde 0 runde 1 runde 2 ... sidste runde. Se "sum" i billedet nedenunder.
Tallene under "sum" er dem du skal bruge. Det jo dem der svarer til N(t) hvor jeres No er 30!
Snak med dine klassekammerater og lav et fælles regneark i hvilken i indtaster alle jeres "sum" tal. T
Det er sådan her regnearket kunne se ud! Det er altid klart nemmest at have resultaterne i kolonner og overskriften i rækker.
PS: Det er muligt at tilgå google sheets regneark direkte, men det er ikke helt simpelt. Hvis du vil gøre det er der en vejledning her.
Antag at en "runde" tager 1 sekund og at antal kerner er tallene i kolonnen "sum" brug nu en eksponentiel regression til at finde halveringsid tast tiden (runde) i tlist og "sum" som nlist som skal være på y-aksen.
Tast nu alle tallene fra "runde" og "sum" i to lister tlist[] og nlist[]
Lav også en liste nlist_enkelt[] som indeholder kun din række tal.
Fremstill nu begge plot og diskutér statistikken. Er det nok med bare ET sæt data ?
tlist og nlist kommer til at se sådan her ud:
tlist[1,2,3,4,5,6,7, ....... 29,30]
nlist[30,26,26,24, .......2,2,1,1,1]
Lav nu eksponentiel regression på dine tal.
def func(x, a, b, c):
return a * np.exp(-b * x) + c
Læg mærke til at a = N0, b=k, x=t og c er en mulig systematisk fejl.
Du får en fejl hvis ikke dine arrays er lige lange tjek dem med
print(len(x_vaerdier))
print(len(y_vaerdier))
En anden hyppig fejl er at du glemmer at bruge enten x_vaerdier, y_vaerdier ELLER tlist, nlist
En tredie hyppig fejl opstår hvis du blander arrays og lister. Prøv det her hvis det fejler så laver du en ekisterende liste om til et array
minliste=[1,2,3]
mitarray=np.array(minliste)
Her er henfaldsloven: N0 er antal kerner til at starte med (30 på arket).
N(t) er antal kerner efter tiden t. k er henfaldskonstanten, altså sandsynligheden for den ENKELTE kerne at henfalde i næste sekund.
Sammenlign ligningen med koden som definerer funktionen func til venstre.
Det ville selvfølgelig være smart at trække data direkte fra googlesheets. Men det er lidt kompliceret.
Det nemmeste er at taste tallene direkte ind i pythonprogrammet.
Match henfaldsloven dvs find ud af hvad a, b, c betyder i henfaldsloven. k-værdien er fx b fra programmet. k er sandsynligheden for at den enkelte kerne henfalder i næste sekund.
Matematisk Opgave: Beregn sandsynligheden for at slå 11 eller 22 med to terninger. (HINT: sandsynligheden for at slå én 1'er er en sjette del altså: 0,16667)
Her har du koden for brug af aaxvline og axhline
Fremstil en flot N(t) graf i python, tast tallene fra google sheets ind i pythonlisterne tlist og nlist. Tilføj nu aksebetegnelser, legende, overskrift og grid. (Koden til plot features kan du hugge her)
Tilføj nu 4 rette linjer i din kode. (brug axvline og axhline (ser her for syntaks og hvordan du tilføjer lodrette og vandrette linjer i dit plot)
to vandrette linjer som viser en halvering af kerner dvs en ved N(0) og en ved N(0)/2
to lodrette linjer som skærer grafen samme sted som de vandrette (prøv dig lidt frem)
aflæs nu halveringstiden på t-aksen
Halveringstiden findes vha følgende formel
Beregn halveringstiden med ovenstående formel og sammenlign med den du fandt i opgave 4.
Vis vha disse to formler at formlen til højre som viser sammenhæng mellem halveringstiden og henfaldskonstanten gælder!
Brug følgende regel :
Henfaldsloven gælder for alle tilfælde hvor der er en proportionalitet mellem et antal N af ting, det kan være kerner, bakterier, medicin i kroppen ... og en procentvis formindskelse af det samlede antal. Denne proportionalitet kan udtrykkes som differentialligningen vist i opgave RB1. Løsningen til denne differentialligning er en e-funktion.
I denne opgave RB løser vi differentialligningen numerisk UDEN brug af randomisering. I opgave RC gør vi brug af randomgenerator for at lave en "rigtig" simulering af radioaktiv henfald som resulterer i henfaldsloven.
Vi vil i dette projekt simulere radioaktiv henfald.
Teorien bag henfald er denne her differential ligning:
Ændringen i antal kerner er proportional med en henfaldskonstant (sandsynligheden for at kernerne henfalder i det næste sekund) k og det antal kerner N som er tilbage til tidspunktet t.
I python kan vi gøre det meget intuitivt ved at definere ændringen af antal kerner dN til at være
dN = -k*N*dt
Så længe loopet til højre kører så formindsker -k (=0.01 her i eksemplet) antal kerner N med 1%.
N(efter) = N(før) - k*N*dt
Ind i loope skal det så skrives som
N = N - k*N*dt
Det ser matematisk lidt mærkeligt ud med N på begge sider, men du skal tænke det at for hver gang loopet kører er det nye N det gamle N minus sandsynligheden for at en kerne henfalder (k) i det næste sekund gange tiden som her er 1 sekund.
Brug koden til højre. Lad python skrive de to lister som du plotter så du får en graf som ligner den til højre.
Læg mærke til at dette her IKKE er en simulering, men et plot af en funktion hvor vi beregner antal kerner med en formel.
Ændre tallene
N, k, dt, t, while t < 500
Hvilken af tallene har en fysisk betydning og hvilke forandrer kun plottet?
Sæt nu aksebetegnelser på og overskrift og kom frem til grafen som er vist her til højre.
Brug nu koden fra det exponentielle fit til at regne på dine tal fra terningekasteforsøget. Indsæt det rigtige antal kerner og henfaldskonstanten. Du burde kunne genfinde både halveringstiden og henfaldskonstanten.
Med udganspunkt i henfaldsligningen kan man opstille det her:
I python kan det nu skrives som følgende:
N = 1000
k = 0.01
dt = 1
t = 0.0
nlist=[]
tlist=[]
while t < 500:
print(t,N)
N = N - k*N*dt
t = t + dt
nlist.append(N)
tlist.append(t)
plt.plot(tlist,nlist)
Tænk dN(t) som værende den ændring der sker i N fra hver step af dt.
Her skal vi sætte de to tools, Random generator og eksponentiel regression sammen. Det er meningen at i SELV skal bygge programmet op. Indel det i nogle klare dele:
import linjerne for numpy og matplotlib
Definition af variablerne N0, N, k, sekunder nlist og tlist
henfaldsloopet
regression, her skal i sikre jer at i har konverteret jeres lister til arrays sådan at programmen for regression kan læse dem.
x_vaerdier = np.array(tlist)
y_vaerdier = np.array(nlist)
Plot nu grafen. Hvis du kopierer teksten ind fra Exp-Regression. Husk at tilrette teksterne på aksen og tilføj gerne grid() og linjer som viser halveringstiden plt.axhline(....) fra "plot en graf"
Vi har N0=1000 kerner der henfalder med en vis sandsynlighed. Prøv at skrive et lille program som:
genererer en liste med tallene 1 til 1000. Brug funktionen til højre
lav nu en loop (brug et for loop og et if loop) som kører inde i den loop som i lavede under 1. Den nye loop skal spørge hver kerne om den er henfaldet. (se kodeeksempel til højre)
plot nu ylist(xlist) og se om du kan få det til at ligne et henfaldsplot :-)
Forklaring:
Hvor mange sekunder måler vi?
for j in range(sekunder):
Vi spørger hver tilbageværende kerne om den er henfaldet:
for i in range(N):
Er du henfaldet?
if tal < k:
N=N-1
Pas på når I kopierer teksten det er jo indryk der gør at loopsene kører ordentlig. Indryk kan flytte sig når i kopierer teksten. Se programmet når indryk er korrekt.
Prøv for sjov skyld at flytte nlist.append(N) et hak til højre og se hvad der sker.
En liste er en variabel som indeholder mange elementer adskilt af komma fx
tlist = [1,2,3,4,5,....]
Du kan generere en liste med N0=1000 elementer på følgende måde
for i in range(N0):
tlist.append(i)
import numpy as np
import matplotlib.pyplot as plt
N0 = 30
N = N0
k=1/18
sekunder = 200
nlist=[]
tlist=[]
for j in range(sekunder):
for i in range(N):
tal = np.random.random()
if tal < k:
N = N - 1
nlist.append(N)
tlist.append(j)
plt.plot(tlist,nlist)
Forstå at j loopet kører LODRET igennem tabellen tæller altså RUNDER.
i loopet kører nu vandret igennem rækkerne. Spørger hver kerne "er du henfaldet?" er tal < k? hvis ja så er N = N - 1 videre til næste kerne.
Prøv at tjekke ovenstående screenshot hvorfor tror I at jeg har linje to med
N=N0
Hvis der er noget der går galt så er det første I gør at tjekker indholdet og længden af jeres lister.
hvorfor er det faktisk bedre at sætte "append" kommandoer FØR vi lader kernen henfalde?
for j in range(sekunder):
nlist.append(N)
tlist.append(j)
for i in range(N):
tal = np.random.random()
if tal < k:
N=N-1
Sidste del af simuleringen er at udvide vores program til radioaktive familier. Som du kan læse andre steder består