激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java實現求解一元n次多項式的方法示例

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

2021-03-23 13:53豎琴手 Java教程

這篇文章主要介紹了Java實現求解一元n次多項式的方法,涉及java高斯消元法處理矩陣運算解多項式的相關操作技巧,需要的朋友可以參考下

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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++) {
      // 如果當前行對角線項為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;
      // 找到對應位置非0的列
      while (j < order && matrix[j][i] == 0)
        j++;
      // 若對應位置全為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;
  }
}

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

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

原文鏈接:http://blog.csdn.net/strangerzz/article/details/45244249

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: av电影网在线观看 | 在线成人www免费观看视频 | 成人男女激情免费视频 | 免费一级毛片在线播放视频老 | 国产精品福利一区 | 成人三级电影在线 | 久久精品在这里 | 精品一区二区三区免费视频 | 午夜视频在线免费观看 | 欧美淫| 亚洲精华液久久含羞草 | 特级西西444www大精品视频免费看 | 92看片淫黄大片欧美看国产片 | 国产一区二区成人在线 | 中文字幕在线观看电影 | 黄在线观看在线播放720p | 色网免费观看 | av色在线观看 | 亚洲欧洲日产v特级毛片 | 欧美性猛交一区二区三区精品 | 成人在线观看免费观看 | 精品一区二区三区欧美 | 欧美视频一区二区三区 | 毛片免费试看 | 欧美一区高清 | 亚洲情av| 成片免费观看大全 | 亚洲国产女同久久 | 久久99精品久久久久久久久久久久 | 国产乱淫av片免费网站 | 秋霞a级毛片在线看 | 国产一级免费av | avav在线播放 | av在线免费观看播放 | 中文字幕在线播放第一页 | 在线观看国产免费视频 | 小雪奶水翁胀公吸小说最新章节 | 97青青草视频 | 久久99网| 做爰裸体激情2 | 国产精品av久久久久久无 |