您好,登錄后才能下訂單哦!
這篇文章給大家介紹使用Java怎么實現一個n階曲線擬合功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
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; } }
關于使用Java怎么實現一個n階曲線擬合功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。