前言:
当自己代码水平没有那么高的时候还是应该脚踏实地的一点点码(比如说我……)
理论:
参考《数值分析》
代码:
# 拉格朗日插值
import numpy as np
from matplotlib import pyplot as plt
ls = [(1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
num_points = len(ls)
def polynomial_1(x, k):
np_1 = 1
for i in range(len(ls)):
if i == k:
continue
np_i = (x - ls[i][0])
np_1 *= np_i
return np_1
def polynomial_2(k):
np_2 = 1
for i in range(len(ls)):
if i == k:
continue
np_2_0 = (ls[k][0] - ls[i][0])
np_2 = np_2 * np_2_0
return np_2
def polynomial_k(x, k):
return polynomial_1(x, k) / polynomial_2(k)
def Lagrange(x):
lagrange = 0
for i in range(len(ls)):
lagrange_i = ls[i][1] * polynomial_k(x, i)
lagrange += lagrange_i
return lagrange
# 打包数据
x_v = [1920, 1930, 1940, 1950, 1960, 1970, 1980, 1990]
y_v = [106.46, 123.08, 132.12, 152.27, 180.67, 205.05, 227.23, 249.46]
ls = [(x, y) for x, y in zip(x_v, y_v)]
# 绘制图像
x_la = np.linspace(1920, 2000, 1000)
y_la = Lagrange(x_la)
y_2000 = Lagrange(2000)
plt.scatter(x_v, y_v, color='red')
plt.scatter(2000, y_2000, color='green')
plt.plot(x_la, y_la, color='blue')
plt.grid(True)
plt.show()
结语:
使用服务器搭建远程感觉有些大材小用了……