opgaver:Uge2
Pia Jensen (Talk | contribs) |
Pia Jensen (Talk | contribs) |
||
Line 19: | Line 19: | ||
For hjælp til at plotte, kig i kapitel 4 i ''Getting Started with MATLAB'' bogen, der ligger på Absalon. | For hjælp til at plotte, kig i kapitel 4 i ''Getting Started with MATLAB'' bogen, der ligger på Absalon. | ||
+ | |||
+ | Start med at arbejde med datasæt nummer 97, og plot temperatur versus spænding. Er der nogle punkter der ligger underligt? Prøv at se om du kan fjerne disse fra datasættet. | ||
{{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}} | ||
− | |||
Et eksempel på en typisk indlæsning af data kan være koden | Et eksempel på en typisk indlæsning af data kan være koden | ||
Line 32: | Line 33: | ||
hvor <code>datadir</code> er en streng der fortæller MATLAB hvor dataen er gemt, f.eks. <code>data/saras/</code>. Nu er hele datafilen blevet indlæst i en matrice ved navn <code>Data0097</code>, og denne kan man så arbejde videre med. | hvor <code>datadir</code> er en streng der fortæller MATLAB hvor dataen er gemt, f.eks. <code>data/saras/</code>. Nu er hele datafilen blevet indlæst i en matrice ved navn <code>Data0097</code>, og denne kan man så arbejde videre med. | ||
+ | [[File:uge2fig1.png|frame|Plot af temperatur versus spænding for datafil nummer 97.]] | ||
For at plotte temperatur (kolonne 4) versus spænding (kolonne 9), kan man bruge koden | For at plotte temperatur (kolonne 4) versus spænding (kolonne 9), kan man bruge koden | ||
Line 43: | Line 45: | ||
Denne figur kan du se her til højre. | Denne figur kan du se her til højre. | ||
+ | |||
+ | Man kan nu se lidt nærmere på figuren, og se at der er nogle punkter der ligger underligt i forhold til alle de andre - f.eks. langt under kurven i den venstre del af figuren. Disse punkter er fejlmålinger, og dem vil man gerne have væk fra sit datasæt. | ||
+ | [[File:uge2fig2.png|frame|Der er brug for en ny counter til at gemme punkterne, da det nye array ikke skal have tomme linier.]] | ||
+ | Den nemmeste måde at fjerne fejlpunkter på, er ved at sætte nogle grænser for hvor man tillader data at være - og så loope igennem alle datapunkter og kun gemme dem der overholder reglerne. F.eks. kan man fjerne nogle af fejlpunkterne med koden | ||
+ | |||
+ | :<code>k=0;</code> | ||
+ | :<code>for n = 1:length( Data0097(1:end,4) )</code> | ||
+ | ::<code> if Data0097(n,4) < 1.5</code> | ||
+ | :::<code> if Data0097(n,9) > 9.64*10^(-7)</code> | ||
+ | ::::<code> if Data0097(n,9) < 9.85*10^(-7)</code> | ||
+ | :::::<code> k = k + 1;</code> | ||
+ | :::::<code> DataCorrected(k,2) = Data0097(n,9);</code> | ||
+ | :::::<code> DataCorrected(k,1) = Data0097(n,4);</code> | ||
+ | ::::<code> end</code> | ||
+ | :::<code> end</code> | ||
+ | ::<code> else </code> | ||
+ | :::<code> k = k + 1;</code> | ||
+ | :::<code> DataCorrected(k,2) = Data0097(n,9);</code> | ||
+ | :::<code> DataCorrected(k,1) = Data0097(n,4);</code> | ||
+ | ::<code> end</code> | ||
+ | :<code>end</code> | ||
+ | |||
+ | Denne kode laver en counter <code>k</code> der tæller hvor mange punkter der er blevet "godkendt" som gode data. Den tjekker nu for hvert datapunkt, <code>n</code, om den overholder kriterierne, og hvis den gør gemmes punktet i det nye data-array <code>DataCorrected</code>. Hvis punktet ikke overholder kriterierne, bliver det ikke gemt. | ||
{{hidden end}} | {{hidden end}} | ||
Revision as of 15:44, 6 March 2012
Denne uge er der kun en enkelt opgave. I bliver givet nogle data, som I så skal arbejde med. Når I er færdige med nedenstående spørgsmål anbefales det at I leger lidt videre med data, for at vænne jer til at arbejde med større datasæt i MATLAB. I kan også prøve at indlæse nogle af jeres egne data (I har da gemt data fra jeres tidligere kurser, ikke?).
Contents |
Opgave 1 - Saras data
- Start med at hente pakken med datasættene: ExerciseSarasData.zip
Vi skal her arbejde med ægte data, fra Sara Eisenhardts speciale, 2010. Eksperimentet var måling af det magnetiske moment af en prøve af stoffet LiHoF4, som kun er magnetisk ved temperaturer under 1.5 K. Det er jeres opgave at analysere Saras data og producere et godt plot.
Magnetiseringen blev målt med et kraftmoment-magnetometer, en opstilling helt analog til jeres vægt-vippe opstilling. Magnetiseringen i et påtrykt felt giver anledning til et kraftmoment på prøven, $\tau = M B$. Dette giver anledning til en bøjning af en vippe, som igen forårsager ændring af modstanden i en strain gauge. Denne måles som spænding over en Wheatstonebro med en lock-in forstærker.
I dataserierne er bl.a. angivet målt spænding og påtrykt $B$-felt som en tidsserie, der er samplet ofte. Resten er ikke vigtigt her. Se den .m
-fil der er vedlagt dataen for tips til hvordan data kan indlæses.
Spørgsmål a
Overvej, hvordan data bedst kan præsenteres. Skal de skaleres, rebinnes, skal nogle af data smides væk, eller transformeres på anden måde? Lav en serie figurer.
Start gerne med at arbejde med temperatur versus spænding for datasæt nummer 97, da det er det sjoveste.
Brug dataindlæsnings-metoden som er vist i den vedlagte .m
-fil til at indlæse dine data. Husk at pakke datafilerne ud i den mappe som du kører MATLAB i - ellers kan programmet jo ikke finde ud af hvor de ligger.
For hjælp til at plotte, kig i kapitel 4 i Getting Started with MATLAB bogen, der ligger på Absalon.
Start med at arbejde med datasæt nummer 97, og plot temperatur versus spænding. Er der nogle punkter der ligger underligt? Prøv at se om du kan fjerne disse fra datasættet.
Et eksempel på en typisk indlæsning af data kan være koden
fid = fopen([datadir,'2010_01_0097.dat']);
Data0097 = cell2mat(textscan(fid, ...
'%n %n %n %n %n %n %n %n %n %n %n %n %n %n %n %n %n', ...
'headerlines',14));
fclose(fid);
hvor datadir
er en streng der fortæller MATLAB hvor dataen er gemt, f.eks. data/saras/
. Nu er hele datafilen blevet indlæst i en matrice ved navn Data0097
, og denne kan man så arbejde videre med.
For at plotte temperatur (kolonne 4) versus spænding (kolonne 9), kan man bruge koden
figure
plot( Data0097(1:end,4),Data0097(1:end,9),'.','MarkerFaceColor', ...
[0.4 0.4 0.8],'MarkerEdgeColor',[0.4 0.4 0.8] )
title('Originale data','FontWeight','b','FontSize',12)
xlabel('Temperatur','FontSize',12)
ylabel('Spænding','FontSize',12)
axis([0 4.2 9.45e-7 9.8e-7])
Denne figur kan du se her til højre.
Man kan nu se lidt nærmere på figuren, og se at der er nogle punkter der ligger underligt i forhold til alle de andre - f.eks. langt under kurven i den venstre del af figuren. Disse punkter er fejlmålinger, og dem vil man gerne have væk fra sit datasæt.
Den nemmeste måde at fjerne fejlpunkter på, er ved at sætte nogle grænser for hvor man tillader data at være - og så loope igennem alle datapunkter og kun gemme dem der overholder reglerne. F.eks. kan man fjerne nogle af fejlpunkterne med koden
k=0;
for n = 1:length( Data0097(1:end,4) )
if Data0097(n,4) < 1.5
if Data0097(n,9) > 9.64*10^(-7)
if Data0097(n,9) < 9.85*10^(-7)
k = k + 1;
DataCorrected(k,2) = Data0097(n,9);
DataCorrected(k,1) = Data0097(n,4);
end
end
else
k = k + 1;
DataCorrected(k,2) = Data0097(n,9);
DataCorrected(k,1) = Data0097(n,4);
end
end
Denne kode laver en counter k
der tæller hvor mange punkter der er blevet "godkendt" som gode data. Den tjekker nu for hvert datapunkt, n</code, om den overholder kriterierne, og hvis den gør gemmes punktet i det nye data-array <code>DataCorrected
. Hvis punktet ikke overholder kriterierne, bliver det ikke gemt.
Spørgsmål b
Overvej hvordan man kan udlede den indre støj på de målte data. Antag at der ikke er systematiske fejl, og tilføj dette til figurerne.
Spørgsmål c
Overvej en fortolkning af data.