2011-11-21 11 views
9

से अलग हैं I मैटलैब प्रोग्राम को पायथन में परिवर्तित कर रहा हूं, और मुझे समझ में समस्या आ रही है कि क्यों scipy.interpolate.interp1d MatLab interp1 से अलग परिणाम दे रहा है।SciPy interp1d परिणाम MatLab interp1

MATLAB में उपयोग थोड़ा अलग है:

yi = interp1(x,Y,xi,'cubic') 

SciPy: MatLab:

interp1([0 1 2 3 4], [0 1 2 3 4],[1.5 2.5 3.5],'cubic') 
    1.5000 2.5000 3.5000 

अजगर

f = interp1d(x,Y,kind='cubic') 
yi = f(xi) 

एक छोटी सी उदाहरण के लिए परिणाम एक ही कर रहे हैं:

interp1d([1,2,3,4],[1,2,3,4],kind='cubic')([1.5,2.5,3.5]) 
    array([ 1.5, 2.5, 3.5]) 

लेकिन एक वास्तविक दुनिया उदाहरण के लिए वे ही नहीं हैं:

x = 0.0000e+000 2.1333e+001 3.2000e+001 1.6000e+004 2.1333e+004 2.3994e+004 
Y = -6 -6 20 20 -6 -6 
xi = 0.00000 11.72161 23.44322 35.16484... (2048 data points) 

मैटलैब:

-6.0000e+000 
-1.2330e+001 
-3.7384e+000 
    ... 
7.0235e+000 
7.0028e+000 
6.9821e+000 

SciPy:

array([[ -6.00000000e+00], 
     [ -1.56304101e+01], 
     [ -2.04908267e+00], 
     ..., 
     [ 1.64475576e+05], 
     [ 8.28360759e+04], 
     [ -5.99999999e+00]]) 

मैं कैसे कर सकते हैं के रूप में किसी भी विचार MatLab के साथ संगत परिणाम प्राप्त करें?

संपादित करें: मैं समझता हूँ घन प्रक्षेप एल्गोरिदम जो शायद मतभेद मैं दिखाई दे रही है के लिए खातों के लिए लागू करने में कुछ अक्षांश नहीं है। ऐसा लगता है कि मूल मैटलैब प्रोग्राम जो मैं परिवर्तित कर रहा हूं उसे रैखिक इंटरपोलेशन का उपयोग करना चाहिए था, इसलिए सवाल शायद मूक है।

उत्तर

11

अंतर्निहित प्रक्षेप विधि कि scipy.interpolate.interp1d और interp1 अलग हैं। Scipy नेटलिब fitpack दिनचर्या का उपयोग करता है, जो मानक, सी 2 निरंतर क्यूबिक splines पैदा करता है। interp1 में "क्यूबिक" तर्क टुकड़े की क्यूबिक हेर्मेट इंटरपोलिंग बहुपदों का उपयोग करता है, जो सी 2 निरंतर नहीं हैं। Matlab क्या करता है के स्पष्टीकरण के लिए here देखें।

मुझे लगता है कि अंतर देख रहे हैं का स्रोत है।

0

वर्तमान scipy उपयोग http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.PchipInterpolator.html में यह y = f (x) monotonic घन प्रक्षेप पैदा करेगा पारित कर दिया, और अंक में ढलानों निर्धारित करने के लिए pchip एल्गोरिथ्म का उपयोग करता।

इसलिए प्रत्येक अनुभाग के लिए, (x, y) आपके द्वारा पारित किया जाता है, पचिप एल्गोरिदम गणना (x, dy/dx) की गणना करेगा, और इन बिंदुओं पर ज्ञात व्युत्पन्न के साथ केवल 2 बिंदुओं के माध्यम से केवल घनत्व जा रहा है। प्रति निर्माण, यह लगातार पहले व्युत्पन्न के साथ निरंतर होगा।