मैं एक दिलचस्प लेकिन बदसूरत समस्या में आया।आर: एकीकृत करें: उपखंडों की अधिकतम संख्या तक पहुंच गई, राउंडऑफ त्रुटि
मैं एक ऐसे फ़ंक्शन को एकीकृत करने की कोशिश कर रहा हूं जिसे डेटासेट से गणना की गई है। डेटा यहां पाया जा सकता है: Link to sample.txt।
मैं अपने डेटा पर एक लाइन फिट करके शुरू करता हूं। इसे approxfun
या splinefun
के साथ गैर-रैखिक के साथ रैखिक किया जा सकता है। नीचे दिए गए मेरे उदाहरण में मैं बाद वाले का उपयोग करता हूं। अब, जब मैं फिट समारोह को एकीकृत करने की कोशिश मैं त्रुटि
maximum number of subdivisions reached
में चलाने लेकिन जब मैं उपखंड वृद्धि मैं
roundoff error
मिल मेरे नमूना कोड में मानों से, आप इस विशिष्ट डेटा के लिए देख सकते हैं सीमा निर्धारित करें 754-> 755 है।
मेरे सहयोगी को मैटलैब में इस डेटासेट को एकीकृत करने में कोई समस्या नहीं है। एकीकृत करने के लिए मेरे डेटा में हेरफेर करने का कोई तरीका है? आर में संख्यात्मक एकीकरण के लिए एक और तरीका है?
data<-read.table('sample.txt',sep=',')
colnames(data)<-c('wave','trans')
plot(data$wave,data$trans,type='l')
trans<- -1 * log(data$trans)
plot(data$wave,trans,type='l')
fx.spline<-splinefun(data$wave,trans)
#Try either
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave))
#Above: Number of subdivision reached
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave),subdivisions=754)
#Above: Number of subdivision reached
Fx.spline<-integrate(fx.spline,min(data$wave),max(data$wave),subdivisions=755)
#Above: Roundoff error
फिट फ़ंक्शन पोस्ट करने पर विचार करें। मुझे पैरामीटर अनुमान नहीं मिल रहे हैं, हालांकि शायद यह नहीं है कि splinefun कैसे काम करता है, या मैं कुछ गलत कर रहा हूं। –
आपका डेटा शानदार रूप से "फ्लैट" दिखता है, इसलिए शायद 'एकीकृत' को कॉल करना और 'rel.tol' और 'abs.tol' तर्कों के माध्यम से रूपांतरण सीमा को 1e-9 जैसे कुछ सेट करना आपको एक उत्तर मिलेगा जो कि बहुत सटीक है। –
@MarkMiller यहां एक अच्छा ट्यूटोरियल है: http://casoilresource.lawr.ucdavis.edu/drupal/node/896। फ़ंक्शन को साजिश करने के लिए आप 'प्लॉट (डेटा $ लहर, fx.spline (डेटा $ लहर), टाइप =' एल ') टाइप कर सकते हैं' –