数值计算 中 Lagrange插值,Newton插值,Hermite插值的python代码简单实现

以下代码为数值计算中 的Lagrange插值公式,Newton插值公式以及Hermite插值公式的python代码实现,代码亲测可用且无误,可放心使用和借鉴~

1.lagrange插值公式

代码:

chazhi_x=[0]+list(map(float,input().split()))

chazhi_y=[0]+list(map(float,input().split()))

x=float(input())

n=len(chazhi_x)

m=len(chazhi_y)

s=[0]+[0]*n

if m!=n:

    print("x与y维数不相同,请重新输入")

for i in range(1,n):

    d=1.0

    for j in range(1,n):

        if j!=i:

            d*=((x-chazhi_x[j])/(chazhi_x[i]-chazhi_x[j]))

    s[i]=d

L=0.0

for i in range(1,n):

    L+=chazhi_y[i]*s[i]

print("插值结果为:",L)

2.Newton插值公式

代码:

chazhi_x=list(map(float,input().split()))

chazhi_y=list(map(float,input().split()))

x=float(input())

n=len(chazhi_x)

m=len(chazhi_y)

if n!=m:

    print("x与y维数不相同,请重新输入")

D=[[0]*(n) for i in range(n)]

for i in range(n):

    D[i][0]=chazhi_y[i]

ans=chazhi_y[0]

t=1.0

for i in range(1,n):

    t*=(x-chazhi_x[i-1])

    for j in range(i,n):

        D[j][i]=(D[j][i-1]-D[j-1][i-1])/(chazhi_x[j]-chazhi_x[j-i])

    ans+=D[i][i]*t

print("插值结果为:",ans)

print("差商表如下:")

for i in range(n):

    for j in range(n):

        print("%.6f"%D[i][j],end='\t')

print()

3.Hermite插值公式

代码:

xi=list(map(float,input().split()))

yi=list(map(float,input().split()))

zi=list(map(float,input().split()))

x=float(input())

if len(xi)==len(yi)==len(zi):

    pass

else:

    print("维数不相同,请重新输入")

H=0.0

len=len(xi)

for i in range(len):

    t1=1.0

    t2=0.0

    for j in range(len):

        if j!=i:

            t1=t1*((x-xi[j])/(xi[i]-xi[j]))

            t2=t2+1/(xi[i]-xi[j])

        alpha=(1-2*(x-xi[i])*t2)*t1*t1

        beta=(x-xi[i])*t1*t1

    H=H+yi[i]*alpha+zi[i]*beta

print("插值结果为:",H)

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值