本文實例講述了Java實現的n階曲線擬合功能。分享給大家供大家參考,具體如下:
前面一篇文章Java實現求解一元n次多項式的方法,能解多項式以後,還需要利用那個類,根據若干採樣點數據來對未來數據進行預測,擬合的矩陣在上一篇文章中已經貼出來了,這裡就不說了,本篇主要是如何根據採樣點來計算係數矩陣,併計算預測點的值。
原理很簡單,公式在上一篇文章中也有了,此處直接貼代碼。
其中用到了上一篇文章中寫的類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() { } /* * 實例化後,計算前,先要輸入參數並生成公式arrayX為採樣點的x軸坐標,按照採樣順序排列* arrayY為採樣點的y軸坐標,按照採樣順序與x一一對應排列order * 為進行擬合的階數。用低階來擬合高階曲線時可能會不准確,但階數過高會導致計算緩慢*/ 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並解方程組,得到各階的係數序列factors PolynomialSoluter soluter = new PolynomialSoluter(); factors = soluter.getResult(matrixA, arrayB); if (factors == null) return false; else return true; } // 根據輸入坐標,以及係數序列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:這裡再為大家推薦幾款計算工具供大家進一步參考借鑒:
在線多項式曲線及曲線函數擬合工具:
http://tools.VeVB.COm/jisuanqi/create_fun/
在線繪製多項式/函數曲線圖形工具:
http://tools.VeVB.COm/jisuanqi/fun_draw
在線一元函數(方程)求解計算工具:
http://tools.VeVB.COm/jisuanqi/equ_jisuanqi
科學計算器在線使用_高級計算器在線計算:
http://tools.VeVB.COm/jisuanqi/jsqkexue
在線計算器_標準計算器:
http://tools.VeVB.COm/jisuanqi/jsq
更多關於java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。