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

你可能感兴趣的:(python分段线性插值)