2010-10-04 21 views
8

[नीचे स्क्रीनशॉट]गणित में, सूची प्लॉट का उपयोग करके इंटरपोलेशन फ़ंक्शन क्या है?

मैं कुछ डेटा बिंदुओं के माध्यम से एक चिकनी रेखा खींचने के लिए ListPlot का उपयोग कर रहा था। लेकिन मैं साजिश के पहले और दूसरे व्युत्पन्न के साथ काम करने में सक्षम होना चाहता हूं, इसलिए मैंने सोचा कि मैं इंटरपोलेशन का उपयोग करके एक वास्तविक "फ़ंक्शन" बनाउंगा। लेकिन जैसा कि आप तस्वीर में देख सकते हैं, यह चिकनी नहीं है। जब मैं प्लॉट करता हूं तो कुछ अजीब स्पाइक्स होते हैं [इंटरपोलेशन [...] ...]। मैं सोच रहा हूं कि कैसे सूचीप्लॉट को इंटरपोलेशन फ़ंक्शन मिल गया है, और इंटरपोलेशन [] या किसी अन्य विधि का उपयोग करके मैं वही चीज़ कैसे प्राप्त कर सकता हूं।

myPoints = {{0.,3.87},{1.21,4.05},{2.6,4.25},{4.62,4.48},{7.24,4.73},{9.66,4.93}, 
{12.48,5.14},{14.87,5.33},{17.34,5.55},{19.31,5.78},{20.78,6.01},{22.08,6.34}, 
{22.82,6.7},{23.2,7.06},{23.41,7.54},{23.52,8.78},{23.59,9.59},{23.62,9.93}, 
{23.72,10.24},{23.88,10.56},{24.14,10.85},{24.46,11.05},{24.81,11.2}, 
{25.73,11.44},{27.15,11.63}} 

ListPlot[myPoints, Joined -> True, Mesh -> Full] 

Plot[Interpolation[myPoints][x], {x, 0, 27.2}] 

पिछले एक spikes है:

धन्यवाद,
रोब

यहाँ कॉपी/पेस्ट के लिए कुछ पाठ है।

संपादित करें ...

Gleno pointed out that my List plot is linear. But what about when both have 
InterpolationOrder -> 3? 
ListPlot[myPoints, Joined -> True, Mesh -> Full, InterpolationOrder -> 3] 
Plot[Interpolation[myPoints, InterpolationOrder -> 3][x], {x, 0, 27.2}] 

Mathematica ListPlot Screenshot

उत्तर

4

मुझे विश्वास है कि प्रक्षेप के लिए ListPlot द्वारा प्रयोग किया जाता विधि प्रत्येक सूची सूचकांक के एक समारोह के रूप में समन्वय को जोड़ रहा है। आप अंतर्निहित भेदभाव, उदा के माध्यम से अपने डेरिवेटिव हड़पने के लिए सक्षम होना चाहिए इस तरह के एक प्रक्षेप से

With[{ 
    xyInterpolation=Interpolation[#,InterpolationOrder->3]&/@Transpose[myPoints]}, 
    ParametricPlot[Through[xyInterpolation[i]],{i,1,Length[myPoints]}] 
] 

: निम्नलिखित की तरह कुछ एक ListPlot[...,InterpolationOrder->3] से उत्पादन की तरह लग रहा है बहुत कुछ डीएक्स/डीई == (डीएक्स/डीटी)/(डीई/डीटी)। एक खुशी की बात एक जगह में है कि अंकन दिखावा करने के लिए जहां यह कर सकता है कुछ गणितज्ञों उल्टी :)

+0

धन्यवाद, यह वही है जो मैं ढूंढ रहा था। –

4

आप dissapoint लिए क्षमा करें, लेकिन इस सवाल का जवाब बहुत सरल है। ListLinePlot/ListPlot सिर्फ एक सीधी रेखा

Plot[Interpolation[myPoints, InterpolationOrder -> 1][x], {x, 0, 27.2}] 

Mathematica graphics

ही अन-hacky लाइन का उत्पादन खींचता है। आप दूसरी ऑर्डर इंटरपोलेशन और स्प्लिंस का उपयोग करके सफलता की अलग-अलग परेशानी भी कर सकते हैं।

Plot[Interpolation[myPoints, InterpolationOrder -> 2, Method -> "Spline"][x], {x, 0, 27.2}] 

Mathematica graphics

+0

आह, मैं नोटिस नहीं किया था कि उन वास्तव में सीधे थे।लेकिन जब आप इंटरपोलेशन ऑर्डर -> 3 दोनों को जोड़ते हैं तो क्या होगा? (मैंने इस टिप्पणी में कुछ कोड जोड़ने की कोशिश की ... बुरा विचार ... मुझे प्रश्न संपादित करने दें।) –

+1

ठीक है, इंटरपोलेशनऑर्डर -> 3 दोनों के साथ, मुझे ListPlot पर गोलाकार खंडों के साथ एक चिकनी वक्र मिलता है, लेकिन प्लॉट के साथ एक हैकी वक्र [इंटरपोलेशन [... –

5

शायद आसान:

interp = Interpolation[myPoints, InterpolationOrder -> 2, Method -> "Spline"] 

(*Now let's plot the function and its derivative*) 
Show[[email protected], 
    Plot[{interp'[x], interp[x]}, 
      {x, Min[First /@ myPoints], Max[First /@ myPoints]}, PlotRange -> All]] 

enter image description here

"ब्याज की क्षेत्र" में:

Show[Plot[{interp'[x], interp[x]}, {x, 23, 24}], [email protected]] 

enter image description here

यदि आप चाहते हैं निरंतर दूसरा व्युत्पन्न, सिर्फ इस तरह प्रक्षेप क्रम में वृद्धि:

interp = Interpolation[myPoints, InterpolationOrder -> 3, Method -> "Spline"]; 
Show[Plot[{interp'[x], interp[x]}, {x, 23, 24}], [email protected]] 

enter image description here