python插值计算,python 线性插值

  python插值计算,python 线性插值

  在算法分析的过程中,我们经常会遇到数据插值的过程。为了便于理解,这里给出了相关概念和源程序。希望能有帮助。

  第一种情况:

  给定坐标(x0,y0)和(x1,y1),我们可以求出直线上区间(x0,x1)中一点的位置x的y值。两点之间的线性方程,我们有

  那么,如何做到这一点呢?

  数值分析表明递归是存在的。

  将matplotlib.pyplot作为plt导入

  ""

  详细描述;

  1)计算n阶差商f(x0,x1,x2。xn])。

  2)所有插值节点的xi横坐标集合o

  3)FI/的所有插值节点的纵坐标集

  4)返回xi的I阶差商(I是xi的长度减去1) o的值)

  5) a.Xi和fi的长度必须相等/

  B.因为使用了递归,所以注意不要让堆栈爆炸。哦哦哦

  C.递归减少递归(每一级递归包含两个递归函数),每一级的递归次数按平方增加,总数是二叉树的所有节点),所以容易发生堆栈溢出)

  ""

  defget_order_diff_quot(Xi=[],菲=[]):

  iflen(Xi)2 handlen(菲)2:

  return(get _ order _ diff _ quot)Xi[:len(Xi)-1],fi[:len(fi)-1]-get _ order _ diff _ quot

  return(fi[0]-fi[1])/float(Xi[0]-Xi[1]))))))))652

  ""

  6)获取wi(x)函数

  Wi的语义例w1=(x-x0);w2=(x-x0))x-x1);w3=(x-x0 ) ) x - x1 ) ) x - x2)).

  7)I)阶多项式

  8)所有插值节点的xi横坐标集

  9)返回wi(x)函数

  ""

  efget_wi(I=0,xi=[]):

  defwi(x):

  结果=1.0

  预期范围(一) :

  result *=(x-Xi[各])) .

  返回结果

  返回作业指导书

  ""

  获取hsdhj插值函数

  ""

  defget_Newton_inter(Xi=[],菲=[]):

  DefNewton_inter(x):

  结果=fi[0]

  对于林兰奇(2,Len ) Xi):

  result=(get _ order _ diff _ quot(Xi[:I],fi[:i] ) (get_wi(I-1,Xi ) ) (x))))

  返回结果

  返回牛顿国际机场

  ""

  演示:

  ""

  if __name__==__main__ :

  ""插值节点,这里用二次函数生成插值节点,每两个节点取X轴距离位10 " "

  Sr _ x=[iforinrange(-50,51,10 ) ]

  sr_fx=[i**2 for i in sr_x]

  NX=get_Newton_inter(Sr_x,sr_fx) #获取插值函数

  tmp _ x=[iforinrange(-50,51)] #测试用例

  Tmp_y=[NX(I) for i in tmp_x] #根据插值函数得到测试用例的纵轴。

  ”“画画。

  PLT.figure(IloveChina))

  ax1=PLT.subplot(111))

  这是PLT。SCA(ax1)

  PLT.plot(Sr_x,sr_fx,linestyle=,marker=o ,color=b )

  PLT.plot(tmp_x,tmp_y,linestyle= -,color=r )

  plt.show())

  执行结果;

  image.png

  也可以使用为一维线性插值指定的库:numpy.interp

  numpy.interp(x,xp,fp,left=None,right=None,period=None))。

  研一

  分段线性插值返回具有给定离散数据点(xp,fp)的函数,该函数在x处求值。

  参数描述:

  x:相似阵列

  计算插值的x坐标。

  Xp:一维浮点数序列

  如果未指定参数period,则必须增加数据点的x坐标。否则,xp在规范化周期边界之后进行内部排序,xp=xp% period。

  Fp:一维浮点数或复数序列

  数据的y坐标与xp的长度相同。

  左:对应于fp的可选浮点或复数

  x

  右图:对应于fp的可选float或complex

  XP [-1]的返回值,默认值为fp [-1]。

  期间:无或浮动,可选。

  x坐标的周期。该参数允许对x坐标进行适当的插值。如果指定了period,则忽略参数left和right。

  退货:

  y:浮点或复数(对应fp)或ndarray。

  插值,形状和x一样。

  加薪:

  值错误

  如果xp和fp具有不同的长度,如果xp或fp不是一维序列,如果period==0

  检查:如果不增加xp,结果没有意义。

  案例二:

  另一方面,线性插值是一种利用线性多项式进行曲线拟合的方法,可以在一组离散的已知数据点中构造新的数据点。

  实际上,这可能意味着您可以在已知位置点之间推断新的估计位置点,以创建更高频率的数据或填充缺失值。

  以最简单的形式,想象以下图像:

  image.png

  这里,已知数据点在位置(1,1)和(3,3)处为红色。使用线性迭代,我们可以在它们之间添加一个点,可以用蓝色显示。

  这是一个很简单的问题。如果我们有更多的已知数据点,想要特定频率的插值点怎么办?

  这可以在Python中使用numpy包中的两个函数非常简单地实现:

  #让我们创建十个遵循正弦曲线的x和y值

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  x=np.linspace(0,2*np.pi,10)

  y=np.sin(x)

  plt.plot(x,y, o )

  plt.show()

  图像

  我们有十个已知点,但是假设我们想要一个50的序列。

  我们可以用np.linspace来做这个;序列的起点,序列的终点和我们想要的数据点的总数。

  起点和终点将与你的初始x值相同,所以这里我们指定0和2 * pi。我们还指定了对序列中50个数据点的请求。

  xvals=np.linspace(0,2 * np.pi,50)

  现在,做线性插值!使用np.interp,我们传递所需数据点的列表(我们在上面创建的50个),然后传递原始的x和y值。

  yinterp=np.interp(xvals,x,y)

  现在,让我们绘制原始值,然后覆盖新的插值!

  plt.plot(x,y, o )

  plt.plot(xvals,yinterp,-x )

  plt.show()

  image.png

  案例三:

  您也可以将此逻辑应用于时间序列中的x和y坐标。在这里,你将根据时间插值x值,然后根据时间插值y值。如果您想要在时间序列中使用更频繁的数据点(例如,您想要在视频帧上叠加一些数据),或者如果存在丢失的数据点或不一致的时间戳,这将特别有用。

  让我们为一个场景创建一些数据,在该场景中,赛车在60秒的比赛时间内只发送10个位置(X&Y)输出(该时间在整个60秒的比赛时间内也是不一致的):

  将numpy作为np导入

  将matplotlib.pyplot作为plt导入

  时间戳=(0,5,10,15,30,35,40,50,55,60)

  x坐标=(0,10,12,13,19,13,12,19,21,25)

  y_coords=(0,5,10,7,2,8,15,19,14,15)

  #现在,让我们创建比赛的开始时间、结束时间和持续时间-我们将需要这些值用于线性插值

  start_timestamp=min(时间戳)

  end_timestamp=max(时间戳)

  持续时间秒数=(结束时间戳-开始时间戳)

  #对x值和y值分别应用间距和插值

  new_intervals=np.linspace(开始时间戳,结束时间戳,持续时间秒数)

  new _ x_coords=NP . interp(new _ intervals,timestamp,x _ coords)

  new _ y_coords=NP . interp(new _ intervals,timestamp,y _ coords)

  #让我们看看我们现在得到的插值位置值:

  plt.plot(x_coords,y_coords, o )

  plt.plot(新x坐标,新y坐标,-x )

  plt.show()

  image.png

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: