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

插值思想

对于任意n个点,都可以用一条曲线连接起来,这条曲线的表达式为:
数据分析(Python)插值——拉格朗日插值法_第1张图片
对于两个点(x1,y1),(x2,y2),这条曲线为:

数据分析(Python)插值——拉格朗日插值法_第2张图片

对于三个点(x1,y1),(x2,y2),(x3,y3),这条曲线为:

编写思想

根据插值点数不同观察插值函数的规律

代码实现

import matplotlib.pyplot as plt
import numpy as np
import math
import 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 = 0
for 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()

插值展示

数据分析(Python)插值——拉格朗日插值法_第3张图片

使用方法

对(1,1),(2.25,1.5),(4,2)三个点进行插值:
修改代码x_point,y_point列表值作为二维空间数据元素坐标即可

import matplotlib.pyplot as plt
import numpy as np
import math
import 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 = 0
for 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()

代码说明

待插值数值点

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)

数据分析(Python)插值——拉格朗日插值法_第4张图片

你可能感兴趣的:(Python程序设计,python)