数据分析(Python)插值——拉格朗日插值法

2020-12-24 10:30发布

插值思想

对于任意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
著作权归作者所有,转载请联系作者获得授权,切勿私自转载。