opgaver:Uge4

From Eksperimentel Fysik WIKI
(Difference between revisions)
Jump to: navigation, search
m (RO: linie --> linje)
 
(7 intermediate revisions by one user not shown)
Line 1: Line 1:
I denne opgave skal I, lige som i sidste uge, fabrikere jeres egne data - denne gang en Gaussisk linieprofil med en bestemt bredde og placering, med Poisson statistik på tælletallene.
+
I denne opgave skal I, lige som i sidste uge, fabrikere jeres egne data - denne gang en Gaussisk linjeprofil med en bestemt bredde og placering, med Poisson statistik på tælletallene.
  
  
 
== Opgave 1 - Spektrometer ==
 
== Opgave 1 - Spektrometer ==
Vi forestiller os et spektrometer, der tæller fotoner som funktion af bølgelængde; én bølgelængde ad gangen. Vi skal måle en enkelt spektrallinie. Liniens amplitude er 100 tællinger per sekund, liniens centrum 5000 Å, og den har bredde ($\sigma$) 50 Å. Der er en baggrund på 10 tællinger per sekund. Usikkerheden på tællinger er givet som $\sqrt{N}$ tællestatistik, og antages gaussisk.
+
Vi forestiller os et spektrometer, der tæller fotoner som funktion af bølgelængde; én bølgelængde ad gangen. Vi skal måle en enkelt spektrallinje. Linjens amplitude er 100 tællinger per sekund, linjens centrum 5000 Å, og den har bredde $\sigma$ 50 Å. Der er en baggrund på 10 tællinger per sekund. Usikkerheden på tællinger er givet som $\sqrt{N}$ tællestatistik, og antages gaussisk.
  
 
=== Spørgsmål 1 - Simulation af data ===
 
=== Spørgsmål 1 - Simulation af data ===
Simulér en måleserie fra 4500 Å til 5500 Å med step af 10 Å, ét sekund per punkt. Brug MATLAB <code>fit</code> funktionen til at fitte en Gaussisk linieprofil til dataen. Vis de simulerede data og det bedste fit i samme plot.
+
Simulér en måleserie fra 4500 Å til 5500 Å med step af 10 Å, ét sekund per punkt. Brug MATLAB <code>fit</code> funktionen til at fitte en Gaussisk linjeprofil til dataen. Vis de simulerede data og det bedste fit i samme plot.
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
Ligesom i sidste uge skal vi simulere nogle støjede data ud fra en kendt model. Start med at lave dine model-data, og tilføj så støj ved at lægge et tal til hvert af punkternes tælletal-værdi. Støjen skal være et tal der er Gaussisk fordelt omkring nul, med en bredde der er usikkerheden på punktet (og usikkerheden på punktet er jo givet ved tællestatistik!). Husk at tælletal er positive heltal, så du er nødt til at runde støjen op eller ned til heltal.
 
Ligesom i sidste uge skal vi simulere nogle støjede data ud fra en kendt model. Start med at lave dine model-data, og tilføj så støj ved at lægge et tal til hvert af punkternes tælletal-værdi. Støjen skal være et tal der er Gaussisk fordelt omkring nul, med en bredde der er usikkerheden på punktet (og usikkerheden på punktet er jo givet ved tællestatistik!). Husk at tælletal er positive heltal, så du er nødt til at runde støjen op eller ned til heltal.
Line 15: Line 15:
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
Først defineres parametrene for den Gaussiske linieprofil-model. Her defineres signalets amplitude <code>a</code>, baggrundens amplitude <code>d</code>, centrum af peaken <code>x0</code> og bredden af peaken <code>sig</code>
+
Først defineres parametrene for den Gaussiske linjeprofil-model. Her defineres signalets amplitude <code>a</code>, baggrundens amplitude <code>d</code>, centrum af peaken <code>x0</code> og bredden af peaken <code>sig</code>
  
 
:<code>a = 100;</code>
 
:<code>a = 100;</code>
Line 51: Line 51:
  
 
:<code>err_exp = sqrt(y_exp);</code>
 
:<code>err_exp = sqrt(y_exp);</code>
 
 
 
  
 
Man kan nu lave et fit til de simulerede data, ved hjælp af MATLAB's indbyggede <code>fit</code> funktion. Denne gang skal man fitte til en funktion man selv skriver ind:
 
Man kan nu lave et fit til de simulerede data, ved hjælp af MATLAB's indbyggede <code>fit</code> funktion. Denne gang skal man fitte til en funktion man selv skriver ind:
Line 68: Line 65:
 
:<code>sig_fit = f1.c;</code>
 
:<code>sig_fit = f1.c;</code>
 
:<code>b_fit = f1.d/t;</code>
 
:<code>b_fit = f1.d/t;</code>
[[File:uge4fig2.png|frame|De simulerede datapunkter for en Gaussisk linieprofil, sammen med et Gaussisk fit.]]
+
[[File:uge4fig2.png|frame|De simulerede datapunkter for en Gaussisk linjeprofil, sammen med et Gaussisk fit.]]
og med disse kan man udregne fit-linien
+
og med disse kan man udregne fit-linjen
  
 
:<code>x_fit = x_min:0.05:x_max;</code>
 
:<code>x_fit = x_min:0.05:x_max;</code>
 
:<code>y_fit = t*a_fit(j)*exp(-((x_fit-x0_fit(j)).^2)./(2*sig_fit(j)^2)) + t*b_fit(j);</code>
 
:<code>y_fit = t*a_fit(j)*exp(-((x_fit-x0_fit(j)).^2)./(2*sig_fit(j)^2)) + t*b_fit(j);</code>
  
Til sidst kan man plotte de simulerede datapunkter sammen med fit-linien,
+
Til sidst kan man plotte de simulerede datapunkter sammen med fit-linjen,
  
 
:<code>figure</code>
 
:<code>figure</code>
Line 110: Line 107:
 
Fit parametrene gemmes, og så kan loopet stoppes igen,
 
Fit parametrene gemmes, og så kan loopet stoppes igen,
  
:<code>...</code>
+
::<code>...</code>
::<code>a_fit(j)  = f1.a/t;
+
::<code>a_fit(j)  = f1.a/t;</code>
::<code>x0_fit(j)  = f1.b;
+
::<code>x0_fit(j)  = f1.b;</code>
::<code>sig_fit(j) = f1.c;
+
::<code>sig_fit(j) = f1.c;</code>
::<code>b_fit(j)  = f1.d/t;
+
::<code>b_fit(j)  = f1.d/t;</code>
 
:<code>end</code>
 
:<code>end</code>
  
Line 121: Line 118:
  
 
=== Spørgsmål 3 - Planlægning af måling ===
 
=== Spørgsmål 3 - Planlægning af måling ===
(SVÆRT) Hvis der er 100 sekunder til rådighed, hvordan skal målingen så planlægges for at bestemme liniens midtpunkt bedst? Og hvad med liniens bredde?
+
(SVÆRT) Hvis der er 100 sekunder til rådighed, hvordan skal målingen så planlægges for at bestemme linjens midtpunkt bedst? Og hvad med linjens bredde?
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
Tænk over hvordan du ville gøre hvis du faktisk sad ved et eksperiment og intet vidste på forhånd. Ville du bare gå i gang fra en ende af og måle punkt efter punkt, eller ville du hoppe rundt og håbe på at du var heldig? Tænk over forskellige fordele og ulemper.
 
Tænk over hvordan du ville gøre hvis du faktisk sad ved et eksperiment og intet vidste på forhånd. Ville du bare gå i gang fra en ende af og måle punkt efter punkt, eller ville du hoppe rundt og håbe på at du var heldig? Tænk over forskellige fordele og ulemper.
 +
 +
Når du har tænkt over de forskellige måder du kunne finde på at måle, så prøv at lave målingerne ved hjælp af MATLAB, og kør et loop så du kan sammenligne distributionerne for de fundne fitte-parametre.
 
{{hidden end}}
 
{{hidden end}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
Som en første iteration kan man se hvad der sker med statistikken hvis man måler på en ligelidt opdelt linie, med samme tælletid for hvert punkt. Start med at omdefinere din værdi af <code>t</code> til at blive udregnet med
+
Som en første iteration kan man se hvad der sker med statistikken hvis man måler på en ligeligt opdelt linje, med samme tælletid for hvert punkt. Start med at omdefinere din værdi af <code>t</code> til at blive udregnet med
  
 
:<code>t_meas = 100;</code>
 
:<code>t_meas = 100;</code>
 
:<code>t = t_meas / length(x_exp);</code>
 
:<code>t = t_meas / length(x_exp);</code>
  
hvor <code>t_meas</code> er den totale tid der skal måles i. Nu kan du køre dit loop, og se på distributionen af dine fitte-parametre.
+
hvor <code>t_meas</code> er den totale tid der skal måles i. Nu kan du køre dit loop, og se på distributionen af dine fitte-parametre. Prøv evt. at ændre på step-størrelsen af dine målinger, så du får færre eller flere datapunkter, mens du stadig tæller den samme tid totalt. Ændrer dette noget ved distributionerne?
  
 +
Du kan også prøve at lave en dataserie hvor du først måler meget kort tid på mange ligeligt fordelte punkter, og så bagefter måler i lidt længere tid nogle af de steder hvor det ser ud til at der er en peak.
  
 +
Hvis du gerne vil kode lidt mere avanceret, kan du jo forsøge at kode en søger-mekanisme, som altid vil forsøge at finde det højeste punkt af en peak.
  
:<code></code>
+
Der er rigtig mange muligheder for at måle på det givne signal, og mange af dem er lige gode. Det vigtige med denne opgave er at I tænker over hvordan I ville optimere den tid I er givet til et sådant eksperiment.
 
{{hidden end}}
 
{{hidden end}}
  
 
=== Spørgsmål 4 - Stor baggrund ===
 
=== Spørgsmål 4 - Stor baggrund ===
 
(SVÆRT) Lad baggrunden være 100 tællinger per sekund og amplituden være 10 tællinger per sekund. Hvor længe skal der tælles for at det kan afgøres, om der er en peak (amplitude signifikant større end nul)?
 
(SVÆRT) Lad baggrunden være 100 tællinger per sekund og amplituden være 10 tællinger per sekund. Hvor længe skal der tælles for at det kan afgøres, om der er en peak (amplitude signifikant større end nul)?
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
 
{{hidden end}}
 
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
For at udregne svaret, løses det hvornår toppunktet for peaken ligger $n$ gange sin usikkerhed plus $n$ gange usikkerheden på baggrunden, væk fra baggrunden. Dette løses med
  
 +
:$\begin{align}
 +
(a+b)t - n\sqrt{(a+b)t} &= bt + n \sqrt{bt} \\
 +
at - n\sqrt{(a+b)t} &= n \sqrt{bt} \\
 +
at &= n (\sqrt{bt} + \sqrt{(a+b)t}) \\
 +
a^2 t^2 &= n^2 (bt + (a+b)t + 2 \sqrt{b(a+b)}t) \\
 +
a^2 t &= n^2 (2b + a + 2\sqrt{b(a+b)}) \\
 +
t &= \dfrac{n^2 (2b + a + 2\sqrt{b(a+b)})}{a^2}
 +
\end{align}$
 +
 +
så hvis f.eks. $a=10$, $b=100$ og $n=1$, så er $t=4.2\,\text{s}$ for et enkelt målepunkt i toppen af peaken. Hvis man vil have bedre sikkerhed, så f.eks. $n=2$ (også kaldt et signifikant signal), så er $t=16.8\,\text{s}$.
 
{{hidden end}}
 
{{hidden end}}
 +
 +
 +
 +
== Samlede løsninger ==
 +
* Et samlet dokument med MATLAB kode til at løse alle opgaverne ovenfor kan hentes her: [[Media:opgaver_uge4_spektrometer.m|opgaver_uge4_spektrometer.m]]

Latest revision as of 21:12, 12 May 2014

I denne opgave skal I, lige som i sidste uge, fabrikere jeres egne data - denne gang en Gaussisk linjeprofil med en bestemt bredde og placering, med Poisson statistik på tælletallene.


Contents

Opgave 1 - Spektrometer

Vi forestiller os et spektrometer, der tæller fotoner som funktion af bølgelængde; én bølgelængde ad gangen. Vi skal måle en enkelt spektrallinje. Linjens amplitude er 100 tællinger per sekund, linjens centrum 5000 Å, og den har bredde $\sigma$ 50 Å. Der er en baggrund på 10 tællinger per sekund. Usikkerheden på tællinger er givet som $\sqrt{N}$ tællestatistik, og antages gaussisk.

Spørgsmål 1 - Simulation af data

Simulér en måleserie fra 4500 Å til 5500 Å med step af 10 Å, ét sekund per punkt. Brug MATLAB fit funktionen til at fitte en Gaussisk linjeprofil til dataen. Vis de simulerede data og det bedste fit i samme plot.

Spørgsmål 2 - Flere måleserier

Kør 100 måleserier og lav histogrammer over fitværdierne. Brug histogrammerne til at bestemme præcisionen af eksperimentet.

Spørgsmål 3 - Planlægning af måling

(SVÆRT) Hvis der er 100 sekunder til rådighed, hvordan skal målingen så planlægges for at bestemme linjens midtpunkt bedst? Og hvad med linjens bredde?

Spørgsmål 4 - Stor baggrund

(SVÆRT) Lad baggrunden være 100 tællinger per sekund og amplituden være 10 tællinger per sekund. Hvor længe skal der tælles for at det kan afgøres, om der er en peak (amplitude signifikant større end nul)?


Samlede løsninger



Personal tools
Namespaces
Variants
Actions
Navigation
Opgaver
Andet
Toolbox
Commercial