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

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

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

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

分段线性插值

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

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

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

程序比较臃肿,还有优化空间。下面看一下效果:

if 

这一段程序,根据传入的五个数据点,自动分了四段进行插值,所得函数如图。

分段线性插值(n=4)

分段线性插值可以很好地解决上一节所讲的龙格现象

上一节讲的龙格现象(拉格朗日插值 n=10)

龙格现象的解决(分段线性插值 n=10)

用分段线性插值解决龙格现象的代码:

# 龙格现象的解决-分段线性插值

上一节用拉格朗日插值产生龙格现象的代码:

# 龙格现象的产生

分段Hermite插值

分段Hermite插值,需要三个列表存放数据:各点的x坐标,各点的y坐标,各点的导数值。

# 分段Hermite插值,需要输入三个列表

同样还有优化的空间,比如排序的时候可以同时根据x_list来排y_list和y_prime_list,而不是排两次。

运行一下程序:

if 

分段Hermite插值的效果

可以看到分段Hermite插值,不仅满足了各点的位置要求,还满足了各点导数值等于0的要求。

-END-

你可能感兴趣的:(hermite插值,python,interpolate,python,list中分段)