对于任意n个点,都可以用一条曲线连接起来,这条曲线的表达式为:
对于两个点(x1,y1),(x2,y2),这条曲线为:
对于三个点(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()
对(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)