Vjezba 3: polumjer laserskog snopa

http://sail.zpf.fer.hr/laserlab/spotsize.nb

Postupno zaklanjanje profila snopa:

Snaga (relativna jedinica) u detektoru koja odgovara pomacima zaslona od 50 μm:

y = {56.7, 56.6, 56.6, 56.5, 56.4, 56.3, 56.1, 55.7, 55.0, 54.1, 
          52.7, 51.2, 49.1, 46.3, 42.9, 39.0, 34.8, 30.7, 26.2, 21.8, 17.8, 
          14.8, 11.5, 8.2, 6.2, 4.4, 3.1, 2.2, 1.6, 1.1, 0.8, 0.6, 0.5, 0.4, 
          0.3, 0.3,  0.3, 0.3};

Polozaji zaslona u μm su relativna velicina pa ih mozemo proizvoljno generirati:

npts = Length[y];
h = 50  Range[npts];

Maksimalna apsolutna pogreska se pridruzuje na osnovu specifikacije mjernog uredjaja (pogreska skale):

dy = Sqrt[(((0.5))^2) + (((0.01  y))^2)];

Uvodimo nekoliko pomocnih varijabli:

data = Transpose[{h, y, dy}];
{h1, hN} = {First@h, Last@h};
hrange = hN - h1;

Prikaz mjerenja:

fig1 = {Red, AbsoluteThickness[1/2], 
          AbsolutePointSize[
            2], 
Point[{#[[1]], #[[2]]}] & /@ 
            data, 
Line[{{#[[1]], #[[2]] - #[[3]]}, {#[[1]], #[[2]] + #[[3]]}}] & /@ 
            data
};

Show[Graphics@fig1, 
        Frame -> 
          True, 
FrameLabel -> {"polozaj zaslona [\
μm]", "Snaga [rel. jed.]"}];

Vrijednost parametra (Subscript[P, 0]) prema izrazu (3.10) iz uputa za vjezbu:

fitP0[h0try_, wtry_, data_] := 
        Module[{hi, pi, di, qi}, 
{hi, pi, di} = 
            Transpose[
              data]; 
qi = (1 - 
                  Erf[Sqrt[2] (hi - h0try)/wtry])/
              2; 
(pi/di) . (qi/di)/(qi/
                  di) . (qi/di)
];

Funkcija (S^2) definirana prema izrazu (3.9) uz vrijednost parametra (Subscript[P, 0]) izracunatu prema izrazu (3.10, funkcija fitP0):

S2fun[h0try_, wtry_, data_] := 
        Module[{hi, pi, di, P0try, resi}, 
{hi, pi, di} = 
            Transpose[data]; 
P0try = 
            fitP0[h0try, wtry, 
              data]; 
resi = (pi - 
                  P0try (1 - Erf[Sqrt[2] (hi - h0try)/wtry])/2)/
              di; 
resi . 
            resi
];

Pronalazimo minimum (S^2) u odnosu na parametre (Subscript[h, 0]) i w:

{S2min, fitpars} = 
      FindMinimum[
        S2fun[h0, w, data], {h0, h1 + hrange/2}, {w, hrange/2}]

Prikaz mjerenja (crveno) i modela odredjenog metodom najmanjih kvadrata (crno):

{P0fit, h0fit, wfit} = {fitP0[h0, w, data], h0, w} /. 
          fitpars;
Plot[
        P0fit (1 - Erf[Sqrt[2] (h - h0fit)/wfit])/
            2, 
{h, h1, hN}, PlotStyle -> {Black}, 
        Frame -> True, PlotPoints -> 128, 
        Epilog -> 
          fig1, 
FrameLabel -> {"polozaj zaslona [\
μm]", "Snaga [rel. jed.]"}];

Procjena pogreske parametara (Subscript[h, 0]) i w (postupak nije opisan u uputama za vjezbu):

dh0j = 
        Sqrt[2/D[(npts - 3) S2fun[h0, w, data]/S2min, {h0, 2}]] /. 
          fitpars;
\(dwj = 
      Sqrt[2/D[\((npts - 3)\) S2fun[h0, w, data]/S2min, {w, 2}]] /. fitpars; 
    ContourPlot[\((npts - 3)\) S2fun[h0, w, data]/S2min, {h0, 
        h0fit - 2  dh0j, h0fit + 2  dh0j}, {w, wfit - 2  dwj, 
        wfit + 2  dwj}, 
Contours -> {\((npts - 3)\) + 
            1.00, \((npts - 3)\) + 2.30}, Axes -> True, 
      AxesOrigin -> {h0fit, wfit}, ContourShading -> False, 
      FrameLabel -> {\*""\!\(h\_0\) [μm]"", "w [μm]"}, 
      PlotPoints -> 64];\)