分段线性插值
目录
分段线性插值
利用线性函数作插值 每一段的线性函数:
\[ F1 = \frac{x-x_{i+1}}{x_i-x_{i+1}}f(x_i)+\frac{x-x_i}{x_{i+1}-x_i}f(x_{i+1}) \]
代码
import numpy as np
import matplotlib.pyplot as plt
#分段线性插值闭包
def get_line(xn, yn):
def line(x):
= -1
index
#找出x所在的区间
for i in range(1, len(xn)):
if x <= xn[i]:
= i-1
index break
else:
+= 1
i
if index == -1:
return -100
#插值
= (x-xn[index+1])*yn[index]/float((xn[index]-xn[index+1])) + (x-xn[index])*yn[index+1]/float((xn[index+1]-xn[index]))
result
return result
return line
= [i for i in range(-50,50,10)]
xn = [i**2 for i in xn]
yn
#分段线性插值函数
= get_line(xn, yn)
lin
= [i for i in range(-50, 40)]
x = [lin(i) for i in x]
y
#画图
'ro')
plt.plot(xn, yn, 'b-')
plt.plot(x, y, plt.show()