opgaver:Uge3

(Difference between revisions)
Jump to: navigation, search
Line 72: Line 72:
 
:<code>plot(x,y_fit,'g-','LineWidth',2)</code>
 
:<code>plot(x,y_fit,'g-','LineWidth',2)</code>
  
og så får man figuren til højre.
+
og så får man figuren til højre. Den reducerede $\chi^2$ findes til sidst med koden
:<code></code>
+
 
 +
:<code>chi2 = sum((y-y_fit).^2 ./ sigma_y.^2);</code>
 +
:<code>chi2red = chi2/(N-2);</code>
 
{{hidden end}}
 
{{hidden end}}
  
Line 79: Line 81:
 
Gentag dette "numeriske forsøg" et antal gange (f.eks. 100) og gem for hver gang fittets parametre. Brug <code>hist()</code> til at finde fordelingen af <code>A</code>, <code>B</code>, og reduceret $\chi^2$. Sammenlign med den estimerede usikkerhed på <code>A</code> og <code>B</code>, og undersøg evt. korrelationen mellem <code>A</code> og <code>B</code> (plot f.eks. <code>A</code> vs. <code>B</code>).
 
Gentag dette "numeriske forsøg" et antal gange (f.eks. 100) og gem for hver gang fittets parametre. Brug <code>hist()</code> til at finde fordelingen af <code>A</code>, <code>B</code>, og reduceret $\chi^2$. Sammenlign med den estimerede usikkerhed på <code>A</code> og <code>B</code>, og undersøg evt. korrelationen mellem <code>A</code> og <code>B</code> (plot f.eks. <code>A</code> vs. <code>B</code>).
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Hint|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Start med at bruge den kode du lavede til spørgsmål a, og lav så et loop uden om det hele. I slutningen af loopet skal du gemme <code>A</code>, <code>B</code> og din reducerede $\chi^2$ i et array - så du kan plotte alle værdierne bagefter.
 +
{{hidden end}}
 +
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
Man kan genbruge al sin kode fra spørgsmål a til at lave sit loop. Definitionen af <code>A_model</code>, <code>B_model</code>, <code>sigma</code>, <code>x</code>, <code>y_model</code> og <code>sigma_y</code> får lov til at blive, og så skal man forberede sit loop med antal gange man vil køre det, og tre lister til at gemme de resultater man får,
  
{{hidden end}}{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
+
:<code>N_iter = 100;</code>
 +
:<code>A_liste = zeros(1,N_iter);</code>
 +
:<code>B_liste = zeros(1,N_iter);</code>
 +
:<code>chi2_liste = zeros(1,N_iter);</code>
  
 +
Herefter starter man sit loop lige før udregningen af <code>y</code>, således at hvert loop laver en ny række punkter med anderledes støj.
 +
 +
:<code>for i = 1:N_iter</code>
 +
::<code>y = y_model + sigma_y.*randn(size(y_model));</code>
 +
::<code>...</code>
 +
 +
Udregningen af regressionsparametrene er helt som før. Til sidst skal man gemme sine resultater i sine arrays,
 +
 +
::<code>...</code>
 +
::<code>A_liste(i) = A_fit;</code>
 +
::<code>B_liste(i) = B_fit;</code>
 +
::<code>chi2_liste(i) = chi2red;</code>
 +
:<code>end</code>
 +
 +
Disse arrays kan man nu se lidt på. F.eks. kan man lave histogrammer eller korrelationsplots med <code>hist</code> eller <code>scatter</code>.
 
{{hidden end}}
 
{{hidden end}}
  
Line 87: Line 111:
 
Prøv at anvende MATLABs fittefunktion <code>fit(x,y,'funktion')</code> og sammenlign med jeres egen lineære regression.
 
Prøv at anvende MATLABs fittefunktion <code>fit(x,y,'funktion')</code> og sammenlign med jeres egen lineære regression.
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 
{{hidden begin|toggle=right|title=Løsning|titlestyle=background:#ccccff|bg2=#eeeeee}}
 +
[[File:uge3fig3.png|frame|Modellen og datapunkterne med støj, plottet med fit-linien (grøn).]]
 +
Den automatiske fitning i MATLAB kan bruges med koden
 +
 +
:<code>[res good] = fit(x',y','poly1')</code>
 +
 +
her er <code>poly1</code> den indbyggede lineære funktion, men man kan også selv skrive sin funktion ind (se på MATLAB hjælp siden for <code>fit</code>). Fittet kan nu plottes sammen med datapunkterne og model-linien med
 +
 +
:<code>figure</code>
 +
:<code>errorbar(x,y,sigma_y,'ro')</code>
 +
:<code>hold on</code>
 +
:<code>plot(x,y_model,'b-')</code>
 +
:<code>plot(x,res(x),'g-')</code>
 +
:<code>xlabel('Datapunkter x')</code>
 +
:<code>ylabel('Datapunkter y')</code>
  
 +
Denne figur kan ses til højre.
 
{{hidden end}}
 
{{hidden end}}

Revision as of 17:22, 6 March 2012

I denne opgave skal I arbejde med fitning som forklaret i Taylor kapitel 8. I skal her selv lave et datasæt, og lærer derfor også hvordan man genererer tilfældige tal i MATLAB. Opgave 2 og 3 er uafhængige, og kan laves i den rækkefølge I har lyst til.


Contents

Opgave 1 - Fitning

Spørgsmål 1 - Lineær model

Antag at I har en lineær model som i Taylor afsnit 8.2,

$y = A + B x .$

Vælg passende værdier af A og B og lav en vektor x med målepunkter, f.eks. A = 0, B = 1, x = -2:0.1:2. Lav nu en vektor med den "sande" y ud fra modellen. Vælg en usikkerhed for målingerne, og læg en normalfordelt støj til hver måling - brug MATLAB funktionen randn(). Plot målingerne (med usikkerhederne) og den "sande" model i samme plot.

Beregn lineær regression ud fra Taylor og find de estimerede værdier for A og B, og beregn den fittede modelværdi, y_fit. Plot y_fit oveni det forrige plot og se hvor godt fittet er. Beregn den reducerede $\chi^2$, givet ved

$\dfrac{\chi^2}{N-P} ,$

hvor $N$ er antal datapunkter og $P$ er antal fit-parametre.

Spørgsmål 2 - Gentagelse

Gentag dette "numeriske forsøg" et antal gange (f.eks. 100) og gem for hver gang fittets parametre. Brug hist() til at finde fordelingen af A, B, og reduceret $\chi^2$. Sammenlign med den estimerede usikkerhed på A og B, og undersøg evt. korrelationen mellem A og B (plot f.eks. A vs. B).

Spørgsmål 3 - Automatisk fitning i MATLAB

Prøv at anvende MATLABs fittefunktion fit(x,y,'funktion') og sammenlign med jeres egen lineære regression.



Personal tools
Namespaces
Variants
Actions
Navigation
Opgaver
Andet
Toolbox
Commercial