python 程序中的插值错误

Interpolation error in python program

from cmath import phase
import math
import numpy
import numpy as np
from numpy import unwrap
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
import scipy
from scipy import interpolate
from scipy.interpolate import interp1d
import scipy.signal.signaltools as sigtool

我有一个由以下代码生成的数据集。

for i in xrange(10000):
    v = i/10000.0

    if v < 0.25:
        k=0.4*(math.sin(2*3.14*90*v))
        l1.append(k)
    elif 0.25 <= v < 0.5:
        k=0.8*(math.sin(2*3.14*90*v))
        l2.append(k)
    elif 0.5 <= v < 0.75:
        k=0.6*(math.sin(2*3.14*300*v))
        l3.append(k)
    elif 0.75 <= v < 1.0:
        k=0.9*(math.sin(2*3.14*300*v))
        l4.append(k)


comb= l1+l2+l3+l4

k=[]

for i in range(len(comb)):
    i1=i/10000.
    k.append(i1)
    f.write(str(i1)+" "+(str(comb[i])+"\n"))

我正在使用以下代码找到局部最大值和局部最小值及其对应位置:

loc_mx=[]
loc_mn=[]
loc_mnt=[]
loc_mxt=[]
for i in range(len(comb)-2):
    if comb[i] < comb[i+1]:
        if comb[i+1] > comb[i+2]:
            loc_mx.append(comb[i+1])
            loc_mxt.append(i+3)
    if comb[i] > comb[i+1]:
        if comb[i+1] < comb[i+2]:
            loc_mn.append(comb[i+1])
            loc_mnt.append(i+3)

使用以下代码借助局部最大值和局部最小值对数据进行插值

loc_mn.append(comb[len(comb)-1])
loc_mx.append(comb[len(comb)-1])
loc_mnt.append(k[len(comb)-1])
loc_mxt.append(k[len(comb)-1])
loc_mn.reverse
loc_mx.reverse
loc_mn.append(comb[0])
loc_mx.append(comb[0])
loc_mnt.append(k[0])
loc_mxt.append(k[0])
loc_mn.reverse
loc_mx.reverse


min_mnt=min(loc_mnt)
min_mxt=min(loc_mxt)
max_mnt=max(loc_mnt)
max_mxt=max(loc_mxt)


x1=loc_mxt
y1=loc_mx
f1=interpolate.interp1d(x1,y1,kind="cubic")

x2=loc_mnt
y2=loc_mn
f2=interpolate.interp1d(x2,y2,kind="cubic")
f1(k)
f2(k)

我收到以下错误。

  File "emd.py", line 150, in <module>
    int_dt.write(str(k[i])+" "+str(f1(k[i]))+" "+str(f2(k[i])))
  File "/usr/lib/python2.7/dist-packages/scipy/interpolate/polyint.py", line 54, in __call__
    y = self._evaluate(x)
  File "/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py", line 448, in _evaluate
    out_of_bounds = self._check_bounds(x_new)
  File "/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py", line 475, in _check_bounds
    raise ValueError("A value in x_new is below the interpolation "
ValueError: A value in x_new is below the interpolation range.

如果能在这方面得到任何帮助,我们将不胜感激。

内插器无法外推。

f1 = interpolate.interp1d(x1,y1,kind="cubic")

在域 [min(x1), max(x1)].

上定义 f1
In [62]: [min(x1), max(x1)]
Out[62]: [30, 9982]

f1 无法在此域外进行评估。自

In [63]: [min(k), max(k)]
Out[63]: [0.0, 0.9999]

f1(k[i]) 加注

ValueError: A value in x_new is below the interpolation range.

一个类似的问题影响了 f2(k[i]),因为 k 中的值再次位于 [min(x2), max(x2)].

之外