Gnuplot
gnuplot으로 데이터 맞춤
수색…
소개
맞춤 명령은 비선형 최소 제곱 ( NLLS ) Marquardt-Levenberg 알고리즘의 구현을 사용하여 사용자 정의 함수를 데이터 요소 집합 (x,y)
또는 (x,y,z)
집합에 맞출 수 있습니다.
함수 본문에서 발생하는 모든 사용자 정의 변수는 fit 매개 변수 역할을 할 수 있지만 함수의 반환 유형은 실제 값이어야합니다.
통사론
- fit [ xrange ] [ yrange ] 함수 " datafile " parameter_file을 통해 수식어 사용
매개 변수
매개 변수 | 세부 묘사 |
---|---|
피팅 매개 변수 a , b , c 및 이전에 사용되지 않은 문자 | 문자를 사용하여 함수를 맞추는 데 사용될 매개 변수를 나타냅니다. 예 : f(x) = a * exp(b * x) + c , g(x,y) = a*x**2 + b*y**2 + c*x*y |
파일 매개 변수 start.par | 초기화되지 않은 매개 변수 (Marquardt-Levenberg가 자동으로 a=b=c=...=1 )를 초기화하면 start.par 파일에 넣을 수 있고 parameter_file 섹션에서 호출 할 수 있습니다. 예 : fit f(x) 'data.dat' u 1:2 via 'start.par' . start.par 파일의 예제가 아래에 나와 있습니다. |
비고
짧은 소개
fit
은 사용자 정의 함수에 데이터를 가장 적합하게하는 매개 변수 집합을 찾는 데 사용됩니다. 피팅은 입력 데이터 포인트와 함수 값 사이의 '차이'또는 '잔차'(SSR)의 합을 기준으로 같은 위치에서 평가됩니다. 이 양은 종종 'chisquare'(그리스 문자 chi, 2의 제곱)라고 불린다. 알고리즘은 잔차가 제곱되기 전에 입력 데이터 오류 (또는 1.0)에 의해 '가중치가 적용되므로 SSR 또는보다 정확하게 WSSR을 최소화하려고 시도합니다. ( Ibidem )
fit.log
파일
각 반복 단계가 끝나면 스크린과 소위 log-file fit.log
에 fit 상태에 대한 자세한 정보가 제공됩니다. 이 파일은 지워지지는 않지만 항상 첨부되어 있으므로 적합성의 히스토리가 손실되지 않습니다.
오류가있는 데이터 맞추기
최대 12 개의 독립 변수가있을 수 있으며, 항상 1 개의 종속 변수가 있으며 임의의 수의 매개 변수가 적용될 수 있습니다. 선택적으로 데이터 포인트에 가중치를 부여하기 위해 오류 추정을 입력 할 수 있습니다. (T. Williams, C. Kelley - gnuplot 5.0, 인터랙티브 플로팅 프로그램 )
데이터 세트가 있고 명령이 매우 간단하고 자연 스럽다면 적합하게하려면 다음을 수행하십시오.
fit f(x) "data_set.dat" using 1:2 via par1, par2, par3
대신 f(x)
도 f(x, y)
수있다. 데이터 오류가있는 경우에는 {y | xy | z}errors
( { | }
가능한 선택 대표) 수식 옵션을 (구문을 참조하십시오). 예를 들어
fit f(x) "data_set.dat" using 1:2:3 yerrors via par1, par2, par3
여기서 {y | xy | z}errors
옵션에는 각각 오류 예상 값을 지정하는 1 ( y
), 2 ( xy
), 1 ( z
) 열이 필요합니다.
파일의 xyerrors
와 지수 피팅
데이터 오차 추정치는 WSSR 또는 카이 제곱의 가중 합 제곱을 결정할 때 각 데이터 점의 상대적 가중치를 계산하는 데 사용됩니다. 그들은 각각의 데이터 포인트가 맞는 함수에서 벗어나는 정도가 최종 값에 얼마나 많은 영향을 미치는지를 결정하기 때문에 매개 변수 추정에 영향을 줄 수 있습니다. 파라메터 오차 추정을 포함한 적합 출력 정보의 일부는 정확한 데이터 오차 추정치가 제공되면 더 의미가있다. ( Ibidem )
우리는 설정된 샘플 데이터 걸릴 것이다 measured.dat
4 열로 이루어져을 : x 축 좌표 값 ( Temperature (K)
), y 축 좌표 값 ( Pressure (kPa)
), 상기 X 에러 추정치 ( T_err (K)
) 및 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
자, 이론으로부터 우리의 데이터를 근사해야만하는 함수의 프로토 타입을 작성하십시오. 이 경우 :
Z = 0.001
f(x) = W * exp(x * Z)
그렇지 않은 경우 지수 함수 exp(x * Z)
를 계산하면 Marquardt-Levenberg 피팅 알고리즘에서 (Floating Point) Infinity와 NaN으로 이어지는 거대한 값을 산출하기 때문에 매개 변수 Z
초기화 했으므로 일반적으로는 매개 변수 Z
를 초기화하지 않아도됩니다. variables - Marquardt-Levenberg에 대해 더 알고 싶다면 여기를 보십시오.
데이터를 맞추어야 할 때입니다!
fit f(x) "measured.dat" u 1:2:3:4 xyerrors via W, Z
결과는 다음과 같이 보입니다.
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
여기서 W
와 Z
는 원하는 매개 변수로 채워지고 그 매개 변수에 대한 오류를 추정합니다.
아래 코드는 다음 그래프를 생성합니다.
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'
의 맞춤과 플롯 measured.dat
명령을 사용하여 with xyerrorbars
오류가 표시됩니다는 X에와 Y에 추정하고있다. set grid
는 주요 틱에 점선 그리드를 배치합니다.
오류 추정치가 유용하지 않거나 중요하지 않은 경우에는 {y | xy | z}errors
맞춤 옵션 :
fit f(x) "measured.dat" u 1:2 via W, Z
이 경우 xyerrorbars
도 피해야합니다.
"start.par"파일의 예
파일에서 적합 매개 변수를로드하는 경우, 사용할 매개 변수를 모두 선언하고 필요한 경우 매개 변수를 초기화해야합니다.
## 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
맞춤 : 데이터 집합의 기본 선형 보간
적합성의 기본 사용법은 간단한 예를 통해 가장 잘 설명됩니다.
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)
피팅에 사용 된 데이터를 필터링하기 위해 범위를 지정할 수 있습니다. 범위를 벗어난 데이터 포인트는 무시됩니다. (T. Williams, C. Kelley - gnuplot 5.0, 인터랙티브 플로팅 프로그램 )
선형 보간 (선으로 피팅)은 데이터 세트를 맞추는 가장 간단한 방법입니다. y- 수량의 증가가 선형 인 데이터 파일이 있다고 가정하면 다음을 사용할 수 있습니다.
[...] 알려진 다항식 집합의 범위 내에서 새로운 데이터 점을 구성하는 선형 다항식. (위키 백과에서, 선형 보간법 )
1 학년 다항식을 사용한 예
우리는 house_price.dat
라고 불리는 다음의 데이터 세트로 작업 할 것입니다.이 데이터 세트는 특정 도시의 주택의 평방 미터와 그 가격을 $ 1000로 포함합니다.
### '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
gnuplot 에 이러한 매개 변수를 맞추어 보겠습니다. 명령 자체는 매우 간단합니다. 구문에서 알 수 있듯이 피팅 프로토 타입을 정의한 다음 fit
명령을 사용하여 결과를 얻습니다.
## m, q will be our fitting parameters
f(x) = m * x + q
fit f(x) 'data_set.dat' using 1:2 via m, q
그러나 플롯 자체에서 얻어진 파라미터를 사용하는 것도 흥미로울 수 있습니다. 아래 코드는 house_price.dat
파일에 맞고 m
및 q
매개 변수를 플롯하여 데이터 세트의 최적 곡선 근사값을 얻습니다. 일단 매개 변수가 있으면 공식에서 대체하는 주어진 x-vaule
(집의 평방 미터) 에서 y-value
,이 경우에는 주택 가격을 계산할 수 있습니다
y = m * x + q
적절한 x-value
. 코드를 주석으로 보겠습니다.
0. 용어 설정
set term pos col
set out 'house_price_fit.ps'
1. 그래프를 꾸미기위한 통상적 인 관리
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. 적절한 착용감
이를 위해 다음 명령 만 입력하면됩니다.
f(x) = m * x + q
fit f(x) 'house_price.dat' via m, q
3. 문자열에 m
및 q
값 저장 및 플로팅
여기서는 sprintf
함수를 사용하여 적합도 결과를 인쇄 할 레이블 ( object rectangle
상자)을 준비합니다. 마지막으로 전체 그래프를 그립니다.
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
결과는 다음과 같습니다.