欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)求解一元n次多項式的方法示例

 更新時間:2018年01月17日 11:36:59   作者:豎琴手  
這篇文章主要介紹了Java實現(xiàn)求解一元n次多項式的方法,涉及java高斯消元法處理矩陣運算解多項式的相關(guān)操作技巧,需要的朋友可以參考下

本文實例講述了Java實現(xiàn)求解一元n次多項式的方法。分享給大家供大家參考,具體如下:

項目需要做趨勢預(yù)測,采用線性擬合、2階曲線擬合和指數(shù)擬合的算法,各種線性擬合算法寫成矩陣大概是這么個形式:

其中x是橫坐標(biāo)采樣值,y是縱坐標(biāo)采樣值,i是采樣點序列號,a是系數(shù),N是采樣點個數(shù),n是階數(shù),所以線性擬合最后就轉(zhuǎn)成了一個解高階方程組的問題。

不知道有沒有什么好用的java矩陣運算的包,我很不擅長搜集這種資料,所以只好撿起了已經(jīng)放下多年的線性代數(shù),自己寫了個java程序用增廣矩陣的算法來解高階方程組。直接貼代碼好了:

package commonAlgorithm;
public class PolynomialSoluter {
  private double[][] matrix;
  private double[] result;
  private int order;
  public PolynomialSoluter() {
  }
  // 檢查輸入項長度并生成增廣矩陣
  private boolean init(double[][] matrixA, double[] arrayB) {
    order = arrayB.length;
    if (matrixA.length != order)
      return false;
    matrix = new double[order][order + 1];
    for (int i = 0; i < order; i++) {
      if (matrixA[i].length != order)
        return false;
      for (int j = 0; j < order; j++) {
        matrix[i][j] = matrixA[i][j];
      }
      matrix[i][order] = arrayB[i];
    }
    result = new double[order];
    return true;
  }
  public double[] getResult(double[][] matrixA, double[] arrayB) {
    if (!init(matrixA, arrayB))
      return null;
    // 高斯消元-正向
    for (int i = 0; i < order; i++) {
      // 如果當(dāng)前行對角線項為0則與后面的同列項非0的行交換
      if (!swithIfZero(i))
        return null;
      // 消元
      for (int j = i + 1; j < order; j++) {
        if (matrix[j][i] == 0)
          continue;
        double factor = matrix[j][i] / matrix[i][i];
        for (int l = i; l < order + 1; l++)
          matrix[j][l] = matrix[j][l] - matrix[i][l] * factor;
      }
    }
    // 高斯消元-反向-去掉了冗余計算
    for (int i = order - 1; i >= 0; i--) {
      result[i] = matrix[i][order] / matrix[i][i];
      for (int j = i - 1; j > -1; j--)
        matrix[j][order] = matrix[j][order] - result[i] * matrix[j][i];
    }
    return result;
  }
  private boolean swithIfZero(int i) {
    if (matrix[i][i] == 0) {
      int j = i + 1;
      // 找到對應(yīng)位置非0的列
      while (j < order && matrix[j][i] == 0)
        j++;
      // 若對應(yīng)位置全為0則無解
      if (j == order)
        return false;
      else
        switchRows(i, j);
    }
    return true;
  }
  private void switchRows(int i, int j) {
    double[] tmp = matrix[i];
    matrix[i] = matrix[j];
    matrix[j] = tmp;
  }
}

有更好的算法或者有合適的矩陣運算包歡迎交流

PS:這里再為大家推薦幾款計算工具供大家進(jìn)一步參考借鑒:

在線一元函數(shù)(方程)求解計算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

科學(xué)計算器在線使用_高級計算器在線計算:
http://tools.jb51.net/jisuanqi/jsqkexue

在線計算器_標(biāo)準(zhǔn)計算器:
http://tools.jb51.net/jisuanqi/jsq

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java實現(xiàn)注冊登錄跳轉(zhuǎn)

    Java實現(xiàn)注冊登錄跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)注冊登錄跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • java實現(xiàn)稀疏矩陣的壓縮與解壓的方法

    java實現(xiàn)稀疏矩陣的壓縮與解壓的方法

    這篇文章主要介紹了java實現(xiàn)稀疏矩陣的壓縮與解壓 ,把該稀疏矩陣壓縮以三元組形式表示并以文件形式保存,再寫另一個程序讀取文件中的信息把壓縮后的三元組還原成原來的稀疏矩陣,需要的朋友可以參考下
    2022-03-03
  • 如何解決websocket開啟多個頁面訪問同一個連接會失效的問題

    如何解決websocket開啟多個頁面訪問同一個連接會失效的問題

    使用WebSocket時,若多個頁面訪問同一個WebSocket連接可能會導(dǎo)致連接失效,遇到這個問題時,可以通過在SpringBoot中使用@ServerEndpoint注解并添加@Component來解決,出現(xiàn)連接錯誤通常是因為WebSocket連接接收到的是一個GET請求
    2024-09-09
  • Spring context:component-scan的使用及說明

    Spring context:component-scan的使用及說明

    這篇文章主要介紹了Spring context:component-scan的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringMVC中使用Thymeleaf模板引擎實例代碼

    SpringMVC中使用Thymeleaf模板引擎實例代碼

    這篇文章主要介紹了SpringMVC中使用Thymeleaf模板引擎實例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Springboot @WebFilter無法注入其他Bean的示例問題

    Springboot @WebFilter無法注入其他Bean的示例問題

    這篇文章主要介紹了Springboot @WebFilter無法注入其他Bean的示例問題,本文通過示例代碼給大家分享解決方法,需要的朋友可以參考下
    2021-09-09
  • Java 泛型總結(jié)(三):通配符的使用

    Java 泛型總結(jié)(三):通配符的使用

    在泛型的使用中,還有個重要的東西叫通配符,本文介紹通配符的使用。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Java中CompletableFuture?的詳細(xì)介紹

    Java中CompletableFuture?的詳細(xì)介紹

    這篇文章主要介紹了Java中的CompletableFuture,通過創(chuàng)建?CompletableFuture?的對象的工廠方法展開詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-05-05
  • Java 11 正式發(fā)布,這 8 個逆天新特性教你寫出更牛的代碼

    Java 11 正式發(fā)布,這 8 個逆天新特性教你寫出更牛的代碼

    美國當(dāng)?shù)貢r間9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式發(fā)布,可在生產(chǎn)環(huán)境中使用!這是自 Java 8 后的首個長期支持版本
    2018-09-09
  • Java中字符串常見的一些拼接方式總結(jié)

    Java中字符串常見的一些拼接方式總結(jié)

    字符串拼接是我們在Java代碼中比較經(jīng)常要做的事情,就是把多個字符串拼接到一起,下面這篇文章主要給大家總結(jié)介紹了關(guān)于Java中字符串常見的一些拼接方式,需要的朋友可以參考下
    2023-04-04

最新評論