插值问题

7 投票
2 回答
8659 浏览
提问于 2025-04-15 17:40
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

不知道发生了什么

2 个回答

1

X值0.029999999999999999出现了两次,但对应的Y坐标却不同。如果在尝试拟合一个多项式样条段时出现问题,我一点也不觉得奇怪……

13

我觉得问题出在X1的值没有从小到大排列,而且还有一个重复的x点。也就是说,在使用splrep之前,你需要先把X1和Y1的值排序,并去掉重复的值。

根据文档,splrep是对FITPACK库的低级访问,它需要一个已经排序且没有重复的列表,所以才会报错。

虽然interpolate.interp1d看起来可以用,但你真的试过用它来找一个新点吗?我想你会发现当你调用它的时候,比如说rep(2),会出现错误。

撰写回答