Gnuplot
Gnuplot के साथ फ़िट डेटा
खोज…
परिचय
फिट कमांड एक उपयोगकर्ता-परिभाषित फ़ंक्शन को डेटा के एक सेट (x,y)
या (x,y,z)
एक समूह में फिट कर सकती है, जो कि nonlinear कम से कम वर्गों ( NLLS ) Marquardt-Levenberg एल्गोरिथ्म के कार्यान्वयन का उपयोग करता है।
फ़ंक्शन बॉडी में होने वाला कोई भी उपयोगकर्ता-परिभाषित चर एक फिट पैरामीटर के रूप में काम कर सकता है, लेकिन फ़ंक्शन का रिटर्न प्रकार वास्तविक होना चाहिए।
वाक्य - विन्यास
- फिट [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 में रख सकते हैं और उन्हें पैरामीटर_फाइल सेक्शन में कॉल करते हैं। जैसे: fit f(x) 'data.dat' u 1:2 via 'start.par' । start.par फ़ाइल के लिए एक उदाहरण नीचे दिखाया गया है |
टिप्पणियों
संक्षिप्त परिचय
fit
का उपयोग मापदंडों के एक सेट को खोजने के लिए किया जाता है जो 'सर्वोत्तम' आपके डेटा को आपके उपयोगकर्ता-परिभाषित फ़ंक्शन में फिट करता है। फिट को एक ही स्थान पर मूल्यांकन किए गए इनपुट डेटा बिंदुओं और फ़ंक्शन मानों के बीच वर्ग अंतर या 'अवशिष्ट' (SSR) के योग के आधार पर आंका जाता है। इस मात्रा को अक्सर 'चिस्क्वारे' (यानी, ग्रीक अक्षर ची, 2 की शक्ति तक) कहा जाता है। एल्गोरिथ्म SSR को कम करने का प्रयास करता है, या अधिक सटीक रूप से, WSSR, क्योंकि अवशिष्ट को इनपुट डेटा त्रुटियों (या 1.0) से 'भारित' किया जाता है। ( इबीडेम )
fit.log
फ़ाइल
प्रत्येक पुनरावृत्ति कदम के बाद स्क्रीन पर फिट की स्थिति के बारे में और तथाकथित लॉग-फाइल fit.log
पर एक विस्तृत जानकारी दी fit.log
। यह फ़ाइल कभी नहीं मिटाई जाएगी लेकिन हमेशा संलग्न रहती है ताकि फिट का इतिहास खो न जाए।
त्रुटियों के साथ डेटा फिटिंग
12 स्वतंत्र चर हो सकते हैं, हमेशा 1 आश्रित चर होता है, और किसी भी संख्या में मापदंडों को फिट किया जा सकता है। वैकल्पिक रूप से, त्रुटि अनुमान डेटा बिंदुओं को भारित करने के लिए इनपुट हो सकते हैं। (टी। विलियम्स, सी। केली - 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
के साथ घातीय फिटिंग
डेटा त्रुटि अनुमानों का उपयोग प्रत्येक डेटा बिंदु के सापेक्ष वजन की गणना करने के लिए किया जाता है, जब चुकता अवशिष्टों, डब्ल्यूएसएसआर या चेसक्वारे की भारित राशि का निर्धारण किया जाता है। वे पैरामीटर अनुमानों को प्रभावित कर सकते हैं, क्योंकि वे निर्धारित करते हैं कि फिट किए गए फ़ंक्शन से प्रत्येक डेटा बिंदु का विचलन अंतिम मूल्यों पर कितना प्रभाव डालता है। पैरामीटर त्रुटि अनुमानों सहित फिट आउटपुट जानकारी में से कुछ अधिक सार्थक है, यदि सटीक डेटा त्रुटि अनुमान प्रदान किए गए हैं .. ( 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)
जहाँ हमने पैरामीटर Z
को इनिशियलाइज़ किया है क्योंकि अन्यथा एक्सपोनेंशियल फंक्शन exp(x * Z)
मूल्यांकन करने से भारी वैल्यू निकलती है, जिसके कारण Marquardt-Levenberg फिटिंग एल्गोरिथ्म में इन्फिनिटी और NaN हो जाता है, आमतौर पर आपको इनिशियलाइज़ करने की आवश्यकता नहीं होगी। चर - यहाँ एक नज़र है , अगर आप 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)
फिटिंग में उपयोग किए गए डेटा को फ़िल्टर करने के लिए रंग निर्दिष्ट किए जा सकते हैं। आउट-ऑफ-द-रेंज डेटा बिंदुओं को अनदेखा किया जाता है। (टी। विलियम्स, सी। केली - gnuplot 5.0, इंटरएक्टिव प्लॉटिंग प्रोग्राम )
रैखिक प्रक्षेप (एक लाइन के साथ फिटिंग) एक डेटा सेट को फिट करने का सबसे सरल तरीका है। मान लें कि आपके पास एक डेटा फ़ाइल है जहां आपकी y- मात्रा का विकास रैखिक है, तो आप उपयोग कर सकते हैं
[...] ज्ञात डेटा बिंदुओं के असतत सेट की सीमा के भीतर नए डेटा बिंदुओं का निर्माण करने के लिए रैखिक बहुपद। (विकिपीडिया, रैखिक प्रक्षेप से )
एक प्रथम श्रेणी बहुपद के साथ उदाहरण
हम निम्नलिखित डेटा सेट के साथ काम करने जा रहे हैं, जिसे 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
मापदंडों को प्लॉट करेगा। एक बार जब आपके पास पैरामीटर होते हैं, तो आप y-value
गणना कर सकते हैं, इस मामले में किसी भी दिए गए x-vaule
(घर के वर्ग मीटर ) से घर की कीमत , सूत्र में प्रतिस्थापित
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
आउटपुट इस तरह दिखेगा।