java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合

2020年10月4日研究了一下牛顿插值法,其用途是使用x、y两组数值,根据新的x值返回对应的y值,与TREND、FORECAST函数不同,这种方法可应对非线性数据。其作用类似于图表中的曲线拟合或LINEST多项式拟合。类似这种迭代题,数学书上写的很深奥,放到excel里就很直观了。

B、C列是x、y对应值,一阶均差D3=(C3-C2)/($B3-$B2),下拉;

b668bd14569fafda8d41689747611d0a.png

二阶均差E4=(D4-D3)/($B4-$B2),下拉;

188f8eefa4739d7a2f423ff3747f89dc.png

三阶均差F5=(E5-E4)/($B5-$B2)。其他均差以此类推。每次新增一个已有数值,均要增加一阶。

2e61ec4b0f52ac6fff8fef49f268bc48.png

这种方法只是为了便于理解,如果只有少量数据,使用这种方法也可行,如数据点多,每个点都要修改,工作量太大,故应使用D3=IFERROR((C3-C2)/($B3-OFFSET($B$7,-COLUMNS($A3:A$7)-ROWS($A3:A$7)+1,0)),""),右拉,下拉,返回相同的数据。

9433a82d7508aff23ba540f35772e88a.png

A列是总计列,A2=C2,A3填{=OFFSET(D3,0,ROW(B1)-1)*PRODUCT($F$2-$B$2:B2)},下拉。

704f0caa24a579bb7f42306ea72ed61a.png

7f64b1010318b8d35e6bb25f84c139d7.png

F2是新的x值,G2=SUM(A:A),即A列所有数值相加就是新y值。从结果看,精度相当高,其实萌软应该写个函数给大家用,然而并没有,所以现在只能写个公式玩,自定义函数肯定也能写出来,不过也很绕。此处空白太少,我写不下了。

59c8e2a4c3816d5af56a80a25535c19f.png

这个是用LINEST做的多项式拟合,精度没有牛顿插值法那么高。下面的图表中的公式是excel自带的曲线拟合功能生成的公式,最高6次方,拟合的曲线此处与直线重合了,看不清楚。两者的原理相同,应该都是使用LINEST函数生成,所以系数完全一致。matlab里也有这种功能,如果数据要输入excel,在excel中直接计算会更加方便。

6d6683f22cf2c7805002e858b0003448.png

274162f142bb57e2929769ee44fea34c.png

x=11.5返回436.6132,还算可以接受。

2da7c7fec2cce4cb16218a84dd10fdce.png

像这种周期性数据就不能完全拟合了,可看到虚线,而且6次方多项式也不够,7次方多项式才会比较接近,当然图里只能到6次方多项式。x=11时一切正常。

da9ca0676035e33697da82cf5ae4c557.png

x=12返回-13,也正常。

da26179c4ac55d5347ac00514401188d.png

然而,在使用一个自定义的x值时,牛顿插值法的表现又令人崩溃。x=11.5时返回-137.973,这和多项式拟合返回的结果截然不同。按说不太应该返回这个值。6.76这个值应该比较正常。不太确定怎么回事,或许牛顿插值法不太适用于这种周期数据?可能是遇到了传说中的龙格现象,高阶导数产生的误差逐渐扩散传播后导致最终值极度偏离。

542b04b37049166c638db943bdc619b6.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值