java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合
2020年10月4日研究了一下牛頓插值法,其用途是使用x、y兩組數值,根據新的x值返回對應的y值,與TREND、FORECAST函數不同,這種方法可應對非線性數據。其作用類似于圖表中的曲線擬合或LINEST多項式擬合。類似這種迭代題,數學書上寫的很深奧,放到excel里就很直觀了。
B、C列是x、y對應值,一階均差D3=(C3-C2)/($B3-$B2),下拉;
二階均差E4=(D4-D3)/($B4-$B2),下拉;
三階均差F5=(E5-E4)/($B5-$B2)。其他均差以此類推。每次新增一個已有數值,均要增加一階。
這種方法只是為了便于理解,如果只有少量數據,使用這種方法也可行,如數據點多,每個點都要修改,工作量太大,故應使用D3=IFERROR((C3-C2)/($B3-OFFSET($B$7,-COLUMNS($A3:A$7)-ROWS($A3:A$7)+1,0)),""),右拉,下拉,返回相同的數據。
A列是總計列,A2=C2,A3填{=OFFSET(D3,0,ROW(B1)-1)*PRODUCT($F$2-$B$2:B2)},下拉。
F2是新的x值,G2=SUM(A:A),即A列所有數值相加就是新y值。從結果看,精度相當高,其實萌軟應該寫個函數給大家用,然而并沒有,所以現在只能寫個公式玩,自定義函數肯定也能寫出來,不過也很繞。此處空白太少,我寫不下了。
這個是用LINEST做的多項式擬合,精度沒有牛頓插值法那么高。下面的圖表中的公式是excel自帶的曲線擬合功能生成的公式,最高6次方,擬合的曲線此處與直線重合了,看不清楚。兩者的原理相同,應該都是使用LINEST函數生成,所以系數完全一致。matlab里也有這種功能,如果數據要輸入excel,在excel中直接計算會更加方便。
x=11.5返回436.6132,還算可以接受。
像這種周期性數據就不能完全擬合了,可看到虛線,而且6次方多項式也不夠,7次方多項式才會比較接近,當然圖里只能到6次方多項式。x=11時一切正常。
x=12返回-13,也正常。
然而,在使用一個自定義的x值時,牛頓插值法的表現又令人崩潰。x=11.5時返回-137.973,這和多項式擬合返回的結果截然不同。按說不太應該返回這個值。6.76這個值應該比較正常。不太確定怎么回事,或許牛頓插值法不太適用于這種周期數據?可能是遇到了傳說中的龍格現象,高階導數產生的誤差逐漸擴散傳播后導致最終值極度偏離。
總結
以上是生活随笔為你收集整理的java 多项式拟合最多的项数_牛顿插值法、曲线拟合、多项式拟合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: std string与线程安全_这才是现
- 下一篇: vs 服务容器中已存在服务_容器中某Go