插值思想
对于任意n个点,都可以用一条曲线连接起来,这条曲线的表达式为:
对于两个点(x1,y1),(x2,y2),这条曲线为:
对于三个点(x1,y1),(x2,y2),(x3,y3),这条曲线为:
编写思想
根据插值点数不同观察插值函数的规律
代码实现
import matplotlib.pyplot as pltimport numpy as npimport mathimport random y_point = []text_list = []x_point = random.sample(range(0,12),10)#生成不重复的随机数for num in range(10): y_point.append(random.randint(1, 12))#生成1-20随机整数 text='('+str(x_point[num])+','+str(y_point[num])+')'#合并字符串 text_list.append(text) plt.annotate(text_list[num],xy=(x_point[num],y_point[num]),xytext=(x_point[num]+0.5,y_point[num]+0.5)) #annotate第一个参数是文本内容 第二个参数是要标记的位置 第三个参数是文本标记位置x = np.arange(min(x_point), max(x_point)+0.01, 0.01)sum = 0for i in range(len(x_point)): numerator = 1 denominator = 1 for j in range(len(x_point)): if (j != i): numerator *= x - x_point[j] #每一项中的分子 denominator *= x_point[i] - x_point[j] #每一项中的分母 nape = y_point[i] * numerator / denominator #每一项 sum += nape plt.scatter(x_point,y_point, marker=".")plt.plot(x,sum)plt.show()123456789101112131415161718192021222324252627282930313233
插值展示
使用方法
对(1,1),(2.25,1.5),(4,2)三个点进行插值:
修改代码x_point,y_point列表值作为二维空间数据元素坐标即可
import matplotlib.pyplot as pltimport numpy as npimport mathimport random x_point = [1,2.25,4]y_point = [1,1.5,2]text_list = []for num in range(3): text='('+str(x_point[num])+','+str(y_point[num])+')'#合并字符串 text_list.append(text) plt.annotate(text_list[num],xy=(x_point[num],y_point[num]),xytext=(x_point[num]+0.1,y_point[num]+0.1)) #annotate第一个参数是文本内容 第二个参数是要标记的位置 第三个参数是文本标记位置x = np.arange(min(x_point), max(x_point)+0.01, 0.01)sum = 0for i in range(len(x_point)): numerator = 1 denominator = 1 for j in range(len(x_point)): if (j != i): numerator *= x - x_point[j] #每一项中的分子 denominator *= x_point[i] - x_point[j] #每一项中的分母 nape = y_point[i] * numerator / denominator #每一项 sum += nape plt.scatter(x_point,y_point, marker=".")plt.plot(x,sum)plt.show()1234567891011121314151617181920212223242526272829303132333435
代码说明
待插值数值点
x_point,y_point
散点文本标记,循环次数为散点数量,plt.annotate参数->xytext参数可适当修改
for num in range(3):
text=’(’+str(x_point[num])+’,’+str(y_point[num])+’)’#合并字符串
text_list.append(text)
plt.annotate(text_list[num],xy=(x_point[num],y_point[num]),xytext=(x_point[num]+0.1,y_point[num]+0.1))
#annotate第一个参数是文本内容 第二个参数是要标记的位置 第三个参数是文本标记位置
插值范围,可做修改
x = np.arange(min(x_point), max(x_point)+0.01, 0.01)
作者:Atom_QQ2022313691
链接:https://atom2022313691.blog.csdn.net/article/details/106891627
来源:CSDN
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。