Java實(shí)現(xiàn)的n階曲線擬合功能示例
本文實(shí)例講述了Java實(shí)現(xiàn)的n階曲線擬合功能。分享給大家供大家參考,具體如下:
前面一篇文章Java實(shí)現(xiàn)求解一元n次多項(xiàng)式的方法,能解多項(xiàng)式以后,還需要利用那個(gè)類,根據(jù)若干采樣點(diǎn)數(shù)據(jù)來(lái)對(duì)未來(lái)數(shù)據(jù)進(jìn)行預(yù)測(cè),擬合的矩陣在上一篇文章中已經(jīng)貼出來(lái)了,這里就不說(shuō)了,本篇主要是如何根據(jù)采樣點(diǎn)來(lái)計(jì)算系數(shù)矩陣,并計(jì)算預(yù)測(cè)點(diǎn)的值。
原理很簡(jiǎ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() { } /* * 實(shí)例化后,計(jì)算前,先要輸入?yún)?shù)并生成公式 arrayX為采樣點(diǎn)的x軸坐標(biāo),按照采樣順序排列 * arrayY為采樣點(diǎn)的y軸坐標(biāo),按照采樣順序與x一一對(duì)應(yīng)排列 order * 為進(jìn)行擬合的階數(shù)。用低階來(lái)擬合高階曲線時(shí)可能會(huì)不準(zhǔn)確,但階數(shù)過(guò)高會(huì)導(dǎo)致計(jì)算緩慢 */ public boolean generateFormula(double[] arrayX, double[] arrayY, int order) { if (arrayX.length != arrayY.length) return false; this.order = order; int len = arrayX.length; // 擬合運(yùn)算中的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; } } // 實(shí)例化PolynomiaSoluter并解方程組,得到各階的系數(shù)序列factors PolynomialSoluter soluter = new PolynomialSoluter(); factors = soluter.getResult(matrixA, arrayB); if (factors == null) return false; else return true; } // 根據(jù)輸入坐標(biāo),以及系數(shù)序列factors計(jì)算指定坐標(biāo)的結(jié)果 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:這里再為大家推薦幾款計(jì)算工具供大家進(jìn)一步參考借鑒:
在線多項(xiàng)式曲線及曲線函數(shù)擬合工具:
http://tools.jb51.net/jisuanqi/create_fun/
在線繪制多項(xiàng)式/函數(shù)曲線圖形工具:
http://tools.jb51.net/jisuanqi/fun_draw
在線一元函數(shù)(方程)求解計(jì)算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi
科學(xué)計(jì)算器在線使用_高級(jí)計(jì)算器在線計(jì)算:
http://tools.jb51.net/jisuanqi/jsqkexue
在線計(jì)算器_標(biāo)準(zhǔn)計(jì)算器:
http://tools.jb51.net/jisuanqi/jsq
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
logback ThrowableProxyConverter類源碼流程解析
這篇文章主要為大家介紹了logback ThrowableProxyConverter類源碼流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12PropertiesLoaderUtils 出現(xiàn)中文亂碼的解決方式
這篇文章主要介紹了PropertiesLoaderUtils 出現(xiàn)中文亂碼的解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08Java實(shí)現(xiàn)pdf轉(zhuǎn)圖片案例
這篇文章主要介紹了Java實(shí)現(xiàn)pdf轉(zhuǎn)圖片案例,按照步驟放置代碼,一步步完成該案例,將代碼部署便可,需要的朋友可以參考下2021-06-06關(guān)于Spring?Ioc和DI注解的問(wèn)題
這篇文章主要介紹了Spring?Ioc和DI注解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03Mybatis注解sql時(shí)出現(xiàn)的一個(gè)錯(cuò)誤及解決
這篇文章主要介紹了Mybatis注解sql時(shí)出現(xiàn)的一個(gè)錯(cuò)誤及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Java中try-catch的使用及注意細(xì)節(jié)
現(xiàn)在有很多的語(yǔ)言都支持try-catch,比如常見(jiàn)的就是c++,java等,這篇文章主要給大家介紹了關(guān)于Java中try-catch的使用及注意細(xì)節(jié)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06springsecurity實(shí)現(xiàn)用戶登錄認(rèn)證快速使用示例代碼(前后端分離項(xiàng)目)
這篇文章主要介紹了springsecurity實(shí)現(xiàn)用戶登錄認(rèn)證快速使用示例代碼(前后端分離項(xiàng)目),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03springboot前后端分離集成CAS單點(diǎn)登錄(統(tǒng)一認(rèn)證)
單點(diǎn)登錄是一種身份認(rèn)證和授權(quán)技術(shù),允許用戶在多個(gè)應(yīng)用系統(tǒng)中使用同一套用戶名和密碼進(jìn)行登錄,本文主要介紹了springboot前后端分離集成CAS單點(diǎn)登錄,具有一定的參考價(jià)值,感興趣的可以了解一下2024-09-09IDEA項(xiàng)目如何取消git版本管控并添加svn版本控制
在公司內(nèi)部服務(wù)器環(huán)境下,將代碼倉(cāng)庫(kù)從Gitee的Git遷移到SVN可以避免外部版本控制的風(fēng)險(xiǎn),遷移過(guò)程中,先刪除項(xiàng)目的.git文件夾,再通過(guò)Eclipse的設(shè)置界面刪除原Git配置并添加SVN配置,之后,將項(xiàng)目提交到SVN倉(cāng)庫(kù),確保使用ignore列表過(guò)濾不必要的文件2024-10-10java8時(shí)間 yyyyMMddHHmmss格式轉(zhuǎn)為日期的代碼
這篇文章主要介紹了java8時(shí)間 yyyyMMddHHmmss格式轉(zhuǎn)為日期的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09