用python进行计算的过程中,计算精度会受到略微影响,但总体插值效果较好。对比拉格朗日插值,牛顿插值编程实现较简单。牛顿插值介绍见:牛顿插值-百度百科
一、代码
import matplotlib.pyplot as plt
import numpy as np
x = [0.4, 0.55, 0.65, 0.8, 0.9, 1.05]
y = [0.41075, 0.57815, 0.69675, 0.88811, 1.02652, 1.25382]
xi_list = np.arange(0.4, 1, 0.02)
num = 5 # 均差阶数
mean_diff = y[:] # 将值赋给另一个列表,不能直接等于
mean_list = []
for j in range(num): # 迭代计算num次均差
for i in range(len(x) - j - 1):
mean_diff.append((mean_diff[i + 1] - mean_diff[i]) / (x[i + j + 1] - x[i]))
mean_diff = mean_diff[len(x) - j:] # j+1次均差
mean_list.append(mean_diff[0]) # 方便计算,将各阶均差第一个值保存
f_list = []
for xi in xi_list:
pam = 1
pami = []
f = 0
for i in range(num):
pam *= xi - x[i]
pami.append(pam)
f += mean_list[i] * pami[i]
f += y[0] # 插值
f_list.append(f)
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.plot(x, y, label='原值')
plt.scatter(xi_list, f_list, label='插值点', s=5, c='r')
plt.legend()
plt.show()
二、插值效果
选取了给定范围内的若干点,插值效果较好。