python分段线性插值_计算方法(3)——分段插值法(附Python程序)

在上一节计算方法(2)——插值法(附Python程序)当中,主要讲了插值法,介绍了龙格现象,并给出了插值法的代码。

这一讲主要分段插值中的分段线性插值和分段Hermite插值,并给出分段插值的Python程序。

在此之前需要注意一下,n为区间数,n+1为插值节点的个数。

分段线性插值

分段线性插值,需要两个列表,一个用于存放各点的x坐标,一个用于存放各点的y坐标。

因为分段插值的算法需要x坐标按顺序增长,而调用该函数时可能传入的是一些未经排序的散点,所以在传入xlist和ylist时,需要对xlist进行排序,同时ylist也要跟着变化。解决方法是转换成字典,再对字典的key值排序。

# 分段线性插值,需要两个列表

def segmented_linear_interpolate(xlist,ylist,x):

"""n = # of intervals, which is derived from len of xlistlen of xlist is always one item biger than # of intervals"""

# we have to make sure that items in xlist is in order

data = dict(zip(xlist,ylist))

# 按照key排序,也就是xlist

data = sorted(data.items(),key=lambda item:item[0])

data = dict(data)

xlist = list(data.keys())

ylist = list(data.values())

n = len(xlist)-1

if n == 0:

raise ValueError("n should be greater or equal to 1")

# print("segmented interpolate, n =",n)

# 需要把新来的元素判断一下在哪个区间

i = -1

for t in xlist:

if x >= t:

i += 1

if i == -1 or i > len(xlist)-1:

raise ValueError("x sh

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值