Java實現(xiàn)的n階曲線擬合功能示例
本文實例講述了Java實現(xiàn)的n階曲線擬合功能。分享給大家供大家參考,具體如下:
前面一篇文章Java實現(xiàn)求解一元n次多項式的方法,能解多項式以后,還需要利用那個類,根據(jù)若干采樣點數(shù)據(jù)來對未來數(shù)據(jù)進行預測,擬合的矩陣在上一篇文章中已經貼出來了,這里就不說了,本篇主要是如何根據(jù)采樣點來計算系數(shù)矩陣,并計算預測點的值。
原理很簡單,公式在上一篇文章中也有了,此處直接貼代碼。
其中用到了上一篇文章中寫的類commonAlgorithm.PolynomiaSoluter
package commonAlgorithm; import commonAlgorithm.PolynomialSoluter; import java.lang.Math; public class LeastSquare { private double[][] matrixA; private double[] arrayB; private double[] factors; private int order; public LeastSquare() { } /* * 實例化后,計算前,先要輸入參數(shù)并生成公式 arrayX為采樣點的x軸坐標,按照采樣順序排列 * arrayY為采樣點的y軸坐標,按照采樣順序與x一一對應排列 order * 為進行擬合的階數(shù)。用低階來擬合高階曲線時可能會不準確,但階數(shù)過高會導致計算緩慢 */ public boolean generateFormula(double[] arrayX, double[] arrayY, int order) { if (arrayX.length != arrayY.length) return false; this.order = order; int len = arrayX.length; // 擬合運算中的x矩陣和y矩陣 matrixA = new double[order + 1][order + 1]; arrayB = new double[order + 1]; // 生成y矩陣以及x矩陣中冪<=order的部分 for (int i = 0; i < order + 1; i++) { double sumX = 0; for (int j = 0; j < len; j++) { double tmp = Math.pow(arrayX[j], i); sumX += tmp; arrayB[i] += tmp * arrayY[j]; } for (int j = 0; j <= i; j++) matrixA[j][i - j] = sumX; } // 生成x矩陣中冪>order的部分 for (int i = order + 1; i <= order * 2; i++) { double sumX = 0; for (int j = 0; j < len; j++) sumX += Math.pow(arrayX[j], i); for (int j = i - order; j < order + 1; j++) { matrixA[i - j][j] = sumX; } } // 實例化PolynomiaSoluter并解方程組,得到各階的系數(shù)序列factors PolynomialSoluter soluter = new PolynomialSoluter(); factors = soluter.getResult(matrixA, arrayB); if (factors == null) return false; else return true; } // 根據(jù)輸入坐標,以及系數(shù)序列factors計算指定坐標的結果 public double calculate(double x) { double result = factors[0]; for (int i = 1; i <= order; i++) result += factors[i] * Math.pow(x, i); return result; } }
PS:這里再為大家推薦幾款計算工具供大家進一步參考借鑒:
在線多項式曲線及曲線函數(shù)擬合工具:
http://tools.jb51.net/jisuanqi/create_fun/
在線繪制多項式/函數(shù)曲線圖形工具:
http://tools.jb51.net/jisuanqi/fun_draw
在線一元函數(shù)(方程)求解計算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計算器_標準計算器:
http://tools.jb51.net/jisuanqi/jsq
更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
logback ThrowableProxyConverter類源碼流程解析
這篇文章主要為大家介紹了logback ThrowableProxyConverter類源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12PropertiesLoaderUtils 出現(xiàn)中文亂碼的解決方式
這篇文章主要介紹了PropertiesLoaderUtils 出現(xiàn)中文亂碼的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08springsecurity實現(xiàn)用戶登錄認證快速使用示例代碼(前后端分離項目)
這篇文章主要介紹了springsecurity實現(xiàn)用戶登錄認證快速使用示例代碼(前后端分離項目),本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-03-03springboot前后端分離集成CAS單點登錄(統(tǒng)一認證)
單點登錄是一種身份認證和授權技術,允許用戶在多個應用系統(tǒng)中使用同一套用戶名和密碼進行登錄,本文主要介紹了springboot前后端分離集成CAS單點登錄,具有一定的參考價值,感興趣的可以了解一下2024-09-09java8時間 yyyyMMddHHmmss格式轉為日期的代碼
這篇文章主要介紹了java8時間 yyyyMMddHHmmss格式轉為日期的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09