首页 > 编程知识 正文

数值分析拉格朗日插值法,高阶拉格朗日插值公式

时间:2023-05-03 13:44:11 阅读:263978 作者:1472

题目

代码 # 拉格朗日差值公式# 5.1# x, y 按顺序一比一输入xs1 = [1.45, 1.36, 1.14]ys1 = [3.14, 4.15, 5.65]# 原函数不一定升序# xs.sort()# ys.sort()def cal3():x=1.4Lsum=0len_xy=len(xs)for i in range(len_xy):Lsum += (x-xs[(i-1)%3]) * (x-xs[(i-2)%3]) / ( (xs[i%3]-xs[(i-1)%3]) * (xs[i%3]-xs[(i-2)%3]) ) * ys[i%3]print(Lsum)# cal3() # ans = 3.7295242750081474# 改进思路:如果 4甚至更多项,那么怎么实现每一项?多循环?# 5.8 反插值的拉格朗日xs8= [0.45, 0.46, 0.47, 0.48, 0.49, 0.50]ys8 = [0.4754818, 0.4846555, 0.4937452, 0.5027498, 0.5116683, 0.5204999]def Lagrange(x, y, g):print(f" 拉格朗日(x = {xs}, y = {ys}, 参数 = {g}):")Lsum = 0lenx = len(x) # n = lenx-1for i in range(0, lenx):temp = 1for j in range(0, lenx):if( j != i):temp *= ( g - x[j] ) / ( x[i] - x[j] )Lsum += temp * y[i]# 判断计算的是x还是y,反插还是正插target = ''if( id(y) == id(ys) ):target = 'y'elif( id(y) == id(xs) ):target = 'x'print(f" {target}=>{Lsum}")return Lsum# 前两个列表参数,x在前求y,y在前求x,也就是第一个求第二个param = 1.4xs = xs1ys = ys1Lagrange(xs, ys, param)# 验证5.1结果为3.7295242750081474,正确param = 0.5xs = xs8ys = ys8Lagrange(ys, xs, param)

# 改进思路:如果 4甚至更多项,那么怎么实现差商?多循环?

运行效果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。