Lagrange插值
import numpy as np
x = input("请输入x的值:")
x = float(x)
def lagrange(x):
xi = np.array([1,2,3,4,5])
yi = np.array([1,4,7,8,6])
yLagrange = 0
n = len(xi)
for i in range(n):
t = yi[i]
for j in range(n):
if j != i:
t *= (x - xi[j]) / (xi[i] - xi[j])
yLagrange += t
print("Lagrange插值计算结果为:", yLagrange)
return yLagrange
if __name__ == '__main__':
print(lagrange(x))
Newton插值
def data(xlist,ylist):
data_list = input("请输入已知的x,y的值:").split(" ")
for i in range(0,len(data_list)):
if i % 2 == 0:
xlist.append(float(data_list[i]))
else:
ylist.append(float(data_list[i]))
return xlist,ylist
def newton(xlist,ylist,x):
n = len(xlist)
ylist_copy = ylist.copy()
for i in range(0,n):
if i == 0:
continue
else:
for j in range(i,n):
ylist_copy[j] = (ylist[j] - ylist[j-1]) / (xlist[j] - xlist[j-i])
ylist = ylist_copy.copy()
print(ylist)
y_ans = ylist[0]
for p in range(1,n):
for q in range(0,p):
ylist[p] = ylist[p] * (x - xlist[q])
y_ans = y_ans + ylist[p]
return y_ans
data_x = []
data_y = []
data_x,data_y = data(data_x,data_y)
print(data_x)
print(data_y)
x = float(input("待预测x值:"))
y = newton(data_x,data_y,x)
print(y)
Hermite插值
x_list = []
y_list = []
fd_list = []
x_list = input("请输入x的值:").split(" ")
y_list = input("请输入对应的函数值:").split(" ")
fd_list = input("请输入对应的导数值:").split(" ")
x = input("请输入待求的x值:")
n = len(x_list)
for i in range(n):
x_list[i] = float(x_list[i])
for i in range(n):
y_list[i] = float(y_list[i])
for i in range(n):
fd_list[i] = float(fd_list[i])
x = float(x)
def basisfunction(x_list,n,x):
lagrange_basis = []
for j in range(n):
lj = 1
for i in range(n):
if i != j:
lj *= (x-x_list[i])/(x_list[j]-x_list[i])
lagrange_basis.append(lj)
return lagrange_basis
def hermite(x_list,y_list,fd_list,x,n,l_list):
H = 0
alpha = 0
beta = 0
for j in range(n):
sigma = 0
for k in range(n):
if k != j:
sigma += 1/(x_list[j]-x_list[k])
alpha = (1-2*(x-x_list[j])*sigma)*(l_list[j]**2)
beta = (x-x_list[j])*(l_list[j]**2)
H = H +alpha*y_list[j] +beta*fd_list[j]
return H
if __name__ == '__main__':
l_list = basisfunction(x_list,n,x)
print("hermite插值结果为{}".format(hermite(x_list,y_list,fd_list,x,n,l_list)))
转载请注明原文地址:https://blackberry.8miu.com/read-31352.html