Szukaj…


Wprowadzenie

Polecenie dopasowania może dopasować funkcję zdefiniowaną przez użytkownika do zestawu punktów danych (x,y) lub (x,y,z) , wykorzystując implementację nieliniowego algorytmu najmniejszych kwadratów ( NLLS ) Marquardta-Levenberga.

Każda zmienna zdefiniowana przez użytkownika występująca w treści funkcji może służyć jako parametr dopasowania, ale zwracany typ funkcji musi być prawdziwy.

Składnia

  • fit [ xrange ] [ yrange ] funkcjaplik danychza pomocą modyfikatora za pomocą pliku parametrycznego

Parametry

Parametry Szczegół
Parametry dopasowania a , b , c oraz dowolną literę, która nie była wcześniej używana Użyj liter, aby przedstawić parametry, które będą użyte do dopasowania funkcji. Np .: f(x) = a * exp(b * x) + c , g(x,y) = a*x**2 + b*y**2 + c*x*y
Parametry pliku start.par Zamiast używać niezainicjowanych parametrów (Marquardt-Levenberg automatycznie zainicjuje dla ciebie a=b=c=...=1 ), możesz umieścić je w pliku start.par i wywołać je w sekcji parametr_plik . Np .: fit f(x) 'data.dat' u 1:2 via 'start.par' . Przykład pliku start.par pokazano poniżej

Uwagi

Krótkie wprowadzenie

fit służy do znalezienia zestawu parametrów, które „najlepiej” pasują do twoich danych do funkcji zdefiniowanej przez użytkownika. Dopasowanie ocenia się na podstawie sumy kwadratów różnic lub „reszt” (SSR) między wejściowymi punktami danych a wartościami funkcji, ocenianych w tych samych miejscach. Ilość ta jest często nazywana „chisquare” (tj. Grecka litera chi, do potęgi 2). Algorytm próbuje zminimalizować SSR, a ściślej WSSR, ponieważ reszty są „ważone” przez błędy danych wejściowych (lub 1,0), zanim zostaną podniesione do kwadratu. ( Ibidem )

Plik fit.log

Po każdym kroku iteracji podawane są szczegółowe informacje o stanie dopasowania zarówno na ekranie, jak i w tak zwanym pliku dziennika fit.log . Ten plik nigdy nie zostanie usunięty, ale zawsze dołączany, aby historia dopasowania nie została utracona.

Dopasowanie danych z błędami

Może istnieć do 12 zmiennych niezależnych, zawsze jest 1 zmienna zależna i można dopasować dowolną liczbę parametrów. Opcjonalnie można wprowadzić szacunki błędów w celu ważenia punktów danych. (T. Williams, C. Kelley - gnuplot 5.0, An Interactive Plotting Program )

Jeśli masz zestaw danych i chcesz dopasować, jeśli polecenie jest bardzo proste i naturalne:

fit f(x) "data_set.dat" using 1:2 via par1, par2, par3

gdzie zamiast tego f(x) może być również f(x, y) . W przypadku, gdy masz również oszacowania błędu danych, po prostu dodaj {y | xy | z}errors ( { | } reprezentują możliwe opcje) w opcji modyfikatora (patrz Składnia) . Na przykład

fit f(x) "data_set.dat" using 1:2:3 yerrors via par1, par2, par3

gdzie {y | xy | z}errors Opcja {y | xy | z}errors wymaga odpowiednio 1 ( y ), 2 ( xy ), 1 ( z ) kolumny, które określają wartość oszacowania błędu.

Dopasowanie wykładnicze z xyerrors pliku

Oszacowania błędu danych są wykorzystywane do obliczania względnej masy każdego punktu danych przy określaniu ważonej sumy kwadratów reszt, WSSR lub chisquare. Mogą wpływać na oszacowania parametrów, ponieważ określają, jak duży wpływ ma odchylenie każdego punktu danych od dopasowanej funkcji na wartości końcowe. Niektóre informacje o dopasowaniu wyjściowym, w tym oszacowania błędu parametru, są bardziej znaczące, jeśli podano dokładne oszacowania błędu danych. ( Ibidem )

Weźmy przykładowy zestaw danych measured.dat , złożony z 4 kolumn: współrzędnych osi x ( Temperature (K) ), współrzędnych osi y ( Pressure (kPa) ), szacunków błędu x ( T_err (K) ) i oszacowania błędu y ( P_err (kPa) ).

#### 'measured.dat' ####
### Dependence of boiling water from Temperature and Pressure
##Temperature (K) - Pressure (kPa) - T_err (K) - P_err (kPa)

368.5     73.332        0.66    1.5
364.2     62.668        0.66    1.0
359.2     52.004        0.66    0.8
354.5     44.006        0.66    0.7
348.7     34.675        0.66    1.2
343.7     28.010        0.66    1.6
338.7     22.678        0.66    1.2
334.2     17.346        0.66    1.5
329.0     14.680        0.66    1.6
324.0     10.681        0.66    1.2
319.1     8.015         0.66    0.8
314.6     6.682         0.66    1.0
308.7     5.349         0.66    1.5

Teraz skomponuj prototyp funkcji, która z teorii powinna przybliżać nasze dane. W tym przypadku:

Z = 0.001
f(x) = W * exp(x * Z)

gdzie zainicjowaliśmy parametr Z ponieważ w przeciwnym razie ocena funkcji wykładniczej exp(x * Z) daje ogromne wartości, co prowadzi do (zmiennoprzecinkowej) nieskończoności i NaN w algorytmie dopasowania Marquardta-Levenberga, zwykle nie trzeba inicjować zmienne - spójrz tutaj , jeśli chcesz dowiedzieć się więcej o Marquardt-Levenberg.

Czas dopasować dane!

fit f(x) "measured.dat" u 1:2:3:4 xyerrors via W, Z

Wynik będzie wyglądał

After 360 iterations the fit converged.
final sum of squares of residuals : 10.4163
rel. change during last iteration : -5.83931e-07

degrees of freedom    (FIT_NDF)                        : 11
rms of residuals      (FIT_STDFIT) = sqrt(WSSR/ndf)    : 0.973105
variance of residuals (reduced chisquare) = WSSR/ndf   : 0.946933
p-value of the Chisq distribution (FIT_P)              : 0.493377

Final set of parameters            Asymptotic Standard Error
=======================            ==========================
W               = 1.13381e-05      +/- 4.249e-06    (37.47%)
Z               = 0.0426853        +/- 0.001047     (2.453%)

correlation matrix of the fit parameters:
                W      Z      
W               1.000 
Z              -0.999  1.000 

Gdzie teraz W i Z są wypełnione pożądanymi parametrami i szacunkami błędów na nich.

Poniższy kod tworzy następujący wykres.

set term pos col
set out 'PvsT.ps'

set grid
set key center
set xlabel 'T (K)'
set ylabel 'P (kPa)'


Z = 0.001
f(x) = W * exp(x * Z)
fit f(x) "measured.dat" u 1:2:3:4 xyerrors via W, Z

p [305:] 'measured.dat' u 1:2:3:4 ps 1.3 pt 2 t 'Data' w xyerrorbars,\
f(x) t 'Fit'

Rysuj z dopasowaniem measured.dat Użycie polecenia with xyerrorbars wyświetli oszacowania błędów na x i y. set grid umieści przerywaną siatkę na głównych tikach. Dopasowanie wykładnicze

W przypadku gdy oszacowania błędów nie są dostępne lub są nieistotne, możliwe jest również dopasowanie danych bez {y | xy | z}errors opcja dopasowania {y | xy | z}errors :

fit f(x) "measured.dat" u 1:2 via W, Z

W tym przypadku należało również unikać xyerrorbars .

Przykład pliku „start.par”

Jeśli ładujesz parametry dopasowania z pliku, powinieneś zadeklarować w nim wszystkie parametry, których zamierzasz użyć i, w razie potrzeby, zainicjować je.

## Start parameters for the fit of data.dat

m  = -0.0005           
q  = -0.0005           
d  = 1.02              
Tc = 45.0
g_d = 1.0
b  = 0.01002 

Dopasowanie: podstawowa interpolacja liniowa zestawu danych

Podstawowe użycie dopasowania najlepiej wyjaśnić prostym przykładem:

 f(x) = a + b*x + c*x**2
 fit [-234:320][0:200] f(x) ’measured.dat’ using 1:2 skip 4 via a,b,c
 plot ’measured.dat’ u 1:2, f(x)

Można określić zakresy do filtrowania danych używanych w łączeniu. Punkty danych poza zasięgiem są ignorowane. (T. Williams, C. Kelley - gnuplot 5.0, An Interactive Plotting Program )

Interpolacja liniowa (dopasowanie z linią) jest najprostszym sposobem dopasowania zestawu danych. Załóżmy, że masz plik danych, w którym przyrost ilości y jest liniowy, możesz użyć

[...] liniowe wielomiany do tworzenia nowych punktów danych w zakresie dyskretnego zestawu znanych punktów danych. (z Wikipedii, Interpolacja liniowa )

Przykład z wielomianem pierwszej klasy

Będziemy pracować z następującym zestawem danych, o nazwie house_price.dat , który obejmuje metry kwadratowe domu w danym mieście i jego cenę w wysokości 1000 USD.

### 'house_price.dat'
## X-Axis: House price (in $1000) - Y-Axis: Square meters (m^2)

245    426.72
312    601.68
279    518.16
308    571.50
199    335.28
219    472.44
405    716.28
324    546.76
319    534.34
255    518.16

Dopasujmy te parametry za pomocą gnuplot. Samo polecenie jest bardzo proste, jak można zauważyć po składni, wystarczy zdefiniować odpowiedni prototyp, a następnie użyć polecenia fit aby uzyskać wynik:

## m, q will be our fitting parameters
f(x) = m * x + q       
fit f(x) 'data_set.dat' using 1:2 via m, q

Ale może być interesujące również wykorzystanie uzyskanych parametrów w samym wykresie. Poniższy kod pasuje do pliku house_price.dat , a następnie wykreśla parametry m i q , aby uzyskać najlepsze przybliżenie krzywej zestawu danych. Po uzyskaniu parametrów można obliczyć wartość y-value , w tym przypadku cenę domu , z dowolnej podanej wartości x-vaule ( metrów kwadratowych domu), po prostu zastępując formułę

y = m * x + q

odpowiednia x-value . Skomentujmy kod.

0. Ustawienie terminu

set term pos col
set out 'house_price_fit.ps'

1. Zwykłe podawanie do upiększania wykresu

set title 'Linear Regression Example Scatterplot'
set ylabel 'House price (k$ = $1000)'
set xlabel 'Square meters (m^2)'
set style line 1 ps 1.5 pt 7 lc 'red'
set style line 2 lw 1.5 lc 'blue'

set grid
set key bottom center box height 1.4

set xrange [0:450]
set yrange [0:]

2. Właściwe dopasowanie

W tym celu będziemy musieli jedynie wpisać polecenia:

f(x) = m * x + q
fit f(x) 'house_price.dat' via m, q

3. Zapisywanie wartości m i q w ciągu znaków i kreślenie

Tutaj używamy funkcji sprintf do przygotowania etykiety (umieszczonej w object rectangle ), w której wydrukujemy wynik dopasowania. Na koniec wykreślamy cały wykres.

mq_value = sprintf("Parameters values\nm = %f k$/m^2\nq = %f k$", m, q)
set object 1 rect from 90,725 to 200, 650 fc rgb "white" 
set label 1 at 100,700 mq_value


p 'house_price.dat' ls 1 t 'House price', f(x) ls 2 t 'Linear regression'
set out

Wynik będzie wyglądał następująco.

Dopasowanie



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow