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)

在上面的代码中,我得到了错误

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

不知道发生了什么

4

2 回答 2

12

我相信这是由于 X1 值不是从最小到最大排序的,而且您还有一个重复的 x 点,即,您需要先对 X1 和 Y1 的值进行排序,然后才能使用 splrep 并删除重复项。

来自文档的 splrep 似乎是对 FITPACK 库的低级别访问,它需要一个排序的、非重复的列表,这就是它返回错误的原因

interpolate.interp1d 似乎有效,但您是否真的尝试使用它来寻找新点?我认为当你调用它时你会发现一个错误,即 rep(2)

于 2010-01-18T11:36:14.767 回答
1

X 值 0.029999999999999999 出现两次,具有两个不同的 Y 坐标。如果这导致尝试拟合多项式样条段出现问题,我不会感到惊讶......

于 2010-01-05T22:18:52.830 回答