Python数值分析--------牛顿插值法

先上代码:

import matplotlib.pyplot as plt
from math import *
allx = [i for i in range(2,11)]
ally = [i**3+5*i**2+6*i+7 for i in range(2,11)]
orders = 3

def newton_1(allx,ally,orders):
    difference_quotient = [[] for i in range(orders)]
    for j in range(1,1+orders):
        if j == 1:
            for i in range(orders+1-j):
                difference_quotient[j-1].append((ally[i]-ally[i+1])/(allx[i]-allx[i+1]))

        else:
            for i in range(orders+1-j):
                difference_quotient[j-1].append((difference_quotient[j-2][i]-difference_quotient[j-2][i+1]) / (allx[i] - allx[i+j]))

    t = []
    for i in difference_quotient:
        t.append(i[0])    

    sumx = [allx[0]-5+i*0.001 for i in range(1000*(allx[-1]-allx[0]+10))]
    sumy = []

    for j in sumx:
        r,v,f = 1,[],ally[0]
        for i in range(len(t)):
             r *= j - allx[i]
             v.append(r)
             f += difference_quotient[i][0] * v[i]
        sumy.append(f)

    plt.plot(sumx,sumy,c="yellow")
    allx = [i for i in range(-5,14)]
    ally = [i**3+5*i**2+6*i+7 for i in range(-5,14)]
    plt.scatter(allx,ally,s=2,c="red")
    plt.title("order = "+str(orders))
    plt.show()
    return sumx,sumy

p,q = newton_1(allx,ally,orders)

效果图

对于一个多项式函数,orders大于他的最高项似乎就Ok哈拉少了

 然而,并不是所有函数都是多项式形式的

这样就会有一个拟合过度或者拟合不足(数据组数量小于orders)的问题

拟合不足就如下面一组图:

这里先不列出拟合过度了,可以自己试试

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

River Chandler

谢谢,我会更努力学习工作的!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值