2010-01-05 11 views
6
import re  
from decimal import *  
import numpy  
from scipy.signal import cspline1d, cspline1d_eval  
import scipy.interpolate  
import scipy  
import math  
import numpy  
from scipy import interpolate 

Y1 =[0.48960000000000004, 0.52736099999999997, 0.56413900000000006, 0.60200199999999993, 0.64071400000000001, 0.67668399999999995, 0.71315899999999999, 0.75050499999999998, 0.61494199999999999, 0.66246900000000009] 

X1 =[0.024, 0.026000000000000002, 0.028000000000000004, 0.029999999999999999, 0.032000000000000001, 0.034000000000000002, 0.035999999999999997, 0.038000000000000006, 0.029999999999999999, 0.032500000000000001] 

rep = scipy.interpolate.splrep(X1,Y1) 

w powyższym kodzie i jestem coraz błędemInterpolate Pytanie

Traceback (most recent call last): 
File "/home/vibhor/Desktop/timing_tool/timing/interpolation_cap.py", line 64, in <module> 

rep = scipy.interpolate.splrep(X1,Y1) 
File "/usr/lib/python2.6/site-packages/scipy/interpolate/fitpack.py", line 418, in splrep 

raise _iermess[ier][1],_iermess[ier][0] 
ValueError:  Error on input data 

nie wiem co się dzieje

Odpowiedz

1

wartości X. 0.029999999999999999 występuje dwa razy, z dwóch różnych współrzędne Y. Nie zaskoczyłoby mnie, gdyby to spowodowało problem z dopasowaniem wielomianowego segmentu splajnu ....

+0

ale jeśli użyję interpolate.interp1d to działa bezbłędnie robię coś złego – VASUDEVAN

10

Uważam, że jest to spowodowane tym, że wartości X1 nie są zamawiane od najmniejszego do największego plus, a także masz jeden duplikat x punkt , tzn. musisz posortować wartości dla X1 i Y1, zanim będziesz mógł użyć splrep i usunąć duplikaty.

splrep z docs wydają się być niski poziom dostępu do FITPACK bibliotek, które spodziewa się sortowane, non-duplikat listy Dlatego zwraca błąd

interpolate.interp1d może wydawać się do pracy, ale czy rzeczywiście próbował użyć go, aby znaleźć nowy punkt? Myślę, że znajdziesz błąd, gdy go wywołasz, tj. Rep (2)

+1

[Dokumentacja in-line] (http: // www.netlib.org/dierckx/percur.f) ​​rzeczywiście mówi: ** te wartości muszą być podane w kolejności rosnącej. ** – Tim