Przykładowa analiza danych uzyskanych w wyniku badania układu RC (filtra górnoprzepustowego) na pracowni elektronicznej.
Potrzebne będą pakiety Graphics i Statistics.

<< Graphics`

<< Statistics`

Wczytujemy zapisane na dysku pomiary:

wyniki  =  Import["E:/temp/wyniki.txt", "Table"]

Tworzymy tablice zlogarytmowanych pomiarów funkcji przenoszenia w funkcji częstotliwości. Wartość mnożymy przez 20 aby uzyskać wynik w decybelach.

AlistLog  =  
      Table[{Log[10, wyniki[[i]][[1]]], 
          20  Log[10, wyniki[[i]][[2]]]}, {i, 
          1, Dimensions[wyniki][[1]]}]

Potrzebujemy też tablice wartości funkcji A(f):

Alist  =  
      Table[{wyniki[[i]][[1]], wyniki[[i]][[2]]}, {i, 
          1, Dimensions[wyniki][[1]]}]

Tak wygladają dane w skali liniowej:

ListPlot[Alist]

Tak wygladają dane w skali logarytmicznej:

ListPlot[AlistLog, Frame -> True,  
      FrameLabel -> {"log f", "A [dB]"}]

Z teorii funkcja A(f) = 1/Sqrt[1+(fg/f)^2]:

fRC  =  1/Sqrt[1 + (fg/f)^2]

Instrukcja NonlinearFit szuka wartości parametru(ów) najlepiej dopasowanej do danych pomiarowych. Pierwszy argument to dane pomiarowe, drugi założona postać funkcji, trzeci to zmienna niezależna (,,oś X''), a czwarty to lista szukanych  parametrów. W poniższym przykładzie Alist zawiera dane pomiarowe, fRC to funkcja przenoszenia filtra RC, f - częstotliwość a fg to szukana częstotliwość graniczna. Jako wynik dostajemy równanie dopasowanej funkcji z podstawionym parametrem fg:

fRCfit = NonlinearFit[Alist, fRC, f, {fg}]

Rysujemy dane:

wykresLog  =  ListPlot[AlistLog]

I dopasowaną funkcję:

wykresLogfit  =  
      ParametricPlot[{Log[10, f], 20  Log[10, fRCfit]}, {f, 10, 10^6}, 
        PlotRange -> All, PlotPoints -> 500]

i wyświetlamy je razem na jednym wykresie:

Show[%, %%, Frame -> True]

Jak widac powyżej dane pasują dobrze do założonej funkcji. Aby dowiedzieć się więcej używamy NonlinearRegress. Działa podobnie, ale na wyjściu generuje tablicę różnych parametrów. Nas interesuje wartość (dla przykladowych danych!) fgfit=832.44 i jej błąd (SE) fgblad=19.7168.

regresja  =  
      NonlinearRegress[Alist, 1/Sqrt[1 + (fg/f)^2], f, {fg}]

fgfit  =  (ParameterCITable  /.  
                regresja)[[1]][[1]][[1]]
fgblad  =  (ParameterCITable  /.  
                regresja)[[1]][[1]][[2]]

Prawdopodobieństwo że wartość fg=1168 jest zgodny z wynikami pomiarowymi wynosi:

NIntegrate[1/Sqrt[2 π]/
          fgblad Exp[-(x - fgfit)^2/2/fgblad^2], {x, 1168, 
        Infinity}]

Oznacza to że przykładowa wartość fg=1168 Hz jest błędna lub wyznaczona metodą obarczoną ogromnym błędem rzędu 100 Hz.

Na koniec ładny wykres.

\(Opis\  = \ \(\("A = 1/sqrt(1+(fg/f)^2) 
"\)\(<>\)\("fg="\)\(<>\)\(ToString[
          NumberForm[fgfit, 2, 
            NumberPoint -> ""]]\)\(<>\)\(ToString[\(±NumberForm[3  fgblad, 2, 
              NumberPoint -> ""]\)]\)\(<>\)\("(3σ, 99.7%)"\)\(\ \)\)\)

\(final\  = 
      Show[wykresLogfit\ , wykresLog, Frame -> True, 
        FrameLabel -> {"f [Hz]", "A [dB]", "Pomiary + fit", ""}, FrameTicks -> {{{1, "10 Hz"}, {2, "100 Hz"}, {Log[10, 
                  fgfit], \*""(Subscript[f, g])""}, {4, "10 kHz"}, \ {5, "100 kHz"}, {6, "1MHz"}}, Automatic, None, None}, 
        Epilog -> 
          Text[Opis, {4, \(-20\)}, Background -> GrayLevel[0.7]], 
        TextStyle -> {FontFamily -> "Times", 
            FontSize -> 10}]\)

Dla dociekliwych: czy na pewno A->1 dla f>>fg i zmierzona wartość A nie jest np. przesunięta w wyniku
błędu w programie WinPracEl? Dopasowujemy bardziej ogólną funkcję i jak widać nie ma podstaw do twierdzenia że!(b=0). Co do założenia a=1 mogą być pewne (ale niewielkie) wątpliwości.

NonlinearRegress[Alist, a/Sqrt[1 + (fg/f)^2] + b, 
      f, {{fg, 800}, {a, 1.0}, {b, 0.0}}]

Na koniec ''eksportujemy'' rysunek:

Export["E:/temp/final.eps", final, "EPS", 
      ConversionOptions -> {"IncludeSpecialFonts" -> 
            True}]

Export["E:/temp/final.pdf", final, "PDF", 
      ConversionOptions -> {"IncludeSpecialFonts" -> 
            True}]

Export["E:/temp/\
final.jpeg", final, "JPEG", 
      ImageResolution -> 300]

    Export["E:/temp/final.png", final, "PNG", 
      ImageResolution -> 300]