1 在定义的类中设置已知的函数值列表为
2 在 test.py 中选择 Lagrange 插值法求解
输入 需求的 y 值对应的 x 值
输出 所求函数值
3 选择 Newton 插值法求解
输入 需求的 y 值对应的 x 值;
输出 差商表、所求函数值
from class3 import interpolation inter interpolation() # 选择两种插值方法中的一种求解方法 根据所选方法的要求输入所需参数后输出所求值 print( 已知的函数值数表如下 ) print( y , inter.y) print( x , inter.x) i int(input( 选择方法 1. Lagrange插值法; 2. Newton插值法n )) if i 1: xx float(input( 计算Ln(x) x )) print( Lagrange插值法:n , L , len(inter.y)-1, ( , xx, ) , , inter.lagrange(xx)) elif i 2: xx float(input( 计算Nn(x) x )) print( 差商表为: ) print(inter.difference_quotient()) print( Newton插值法:n , N , len(inter.y)-1, ( , xx, ) , , inter.newton(xx))class3.py
import numpy as np class interpolation(object): 包括: 1.Lagrange插值法; 2. Newton插值法 # 设置已知的函数值数表 def __init__(self): self.x [1.0, 1.3, 1.6, 1.9, 2.2] self.y [0.7651977, 0.6200860, 0.4554022, 0.2818186, 0.1103623] # 1. Lagrange插值法:输入要求的y值对应的x值xx, 输出y Ln(xx) def lagrange(self, xx): yy 0 for i in range(len(self.y)): l self.y[i] # 计算基函数 * 函数值 for j in range(len(self.y)): if i ! j: l l * (xx - self.x[j]) / (self.x[i] - self.x[j]) yy yy l return yy # 2. Newton插值法 # 计算差商 返回差商表: 对角线为f(x0),一阶差商f[x0,x1],二阶差商f[x0,x1,x2]... def difference_quotient(self): n len(self.y) q np.zeros([n, n]) for i in range(n): q[i][0] self.y[i] for k in range(1, n): for j in reversed(range(k, n)): q[j][k] (q[j][k-1] - q[j-1][k-1])/(self.x[j] - self.x[j-k]) return q # 牛顿插值法计算xx点的函数值 def newton(self, xx): n len(self.y) sum self.y[0] w np.ones(n-1) for i in range(n-1): for j in range(i 1): w[i] w[i] * (xx - self.x[j]) q self.difference_quotient() for i in range(n-1): sum sum q[i 1][i 1] * w[i] return sum



