文章目录
1.拉格朗日差值法2.牛顿差值法3.注意
数据链接,密码为1234
1.拉格朗日差值法
python中的scipy库提供了拉格朗日差值法的函数,直接调用 案例
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy.interpolate import lagrange
cat_sale = pd.read_excel('data/catering_sale.xls')
cat_sale.drop('日期', axis=1, inplace=True)
# 过滤异常值,并置为空值
cat_sale['销量'][(cat_sale['销量'] 5000)] = np.NAN
# 自定义列向量插值函数
def ployinterp_columns(s, n, k=4):
if n len(s) - k - 1:
y = s[list(range(n - k, n)) + list(range(n + 1, len(s)))]
else:
y = s[list(range(n - k, n)) + list(range(n + 1, n + k + 1))] # 取空值处的前后3个数
y = y[y.notnull()] # 剔除空值
return lagrange(y.index, list(y))(n) # 插值并返回插值结果
# 逐个判断元素是否需要插值
for i in cat_sale.columns:
for j in range(len(cat_sale)):
if (cat_sale[i].isnull())[j]: # 如果为空则插值
print(ployinterp_columns(cat_sale[i], j))
cat_sale[i][j] = ployinterp_columns(cat_sale[i], j)
cat_sale.to_csv('sales.csv') # 输出结果,写入文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210330185353872.png)
2.牛顿差值法
python实现
import numpy as np
import pandas as pd
cat_sale = pd.read_excel('data/catering_sale.xls')
cat_sale.drop('日期', axis=1, inplace=True)
# 过滤异常值,并置为空值
cat_sale['销量'][(cat_sale['销量'] 5000)] = np.NAN
# 分别定义求插商与求w的函数
def cal_f(x, y):
"""
计算插商
"""
f0 = np.zeros((len(x), len(y))) # 定义一个存储插商的数组
for k in range(len(y) + 1): # 遍历列
for i in range(k, len(x)): # 遍历行
if k == 0:
f0[i, k] = y[i]
else:
f0[i, k] = (f0[i, k - 1] - f0[i - 1, k - 1]) / (x[i] - x[i - 1])
print('差商表', '\n', f0)
return f0
def newton(x, y, x_j):
"""
牛顿差值多项式
"""
f0 = cal_f(x, y) # 计算插商
f0 = f0.diagonal()
# 与w相乘
f1 = 0
for i in range(len(f0)):
s = 1
k = 0
while k |