使用Java怎么求解一元n次多项式

  介绍

这篇文章给大家介绍使用Java怎么求解一元n次多项式,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

项目需要做趋势预测,采用线性拟合,2阶曲线拟合和指数拟合的算法,各种线性拟合算法写成矩阵大概是这么个形式:

使用Java怎么求解一元n次多项式

其中x是横坐标采样值,y是纵坐标采样值,我是采样点序列号,一个是系数,n是采样点个数,n是阶数,所以线性拟合最后就转成了一个解高阶方程组的问题。

不知道有没有什么好用的Java矩阵运算的包,我很不擅长搜集这种资料,所以只好捡起了已经放下多年的线性代数,自己写了个Java程序用增广矩阵的算法来解高阶方程组。直接贴代码好了:

package  commonAlgorithm;   public  class  PolynomialSoluter  {   private 才能;双[][],矩阵;   private 才能;双[],结果;   private 才能;int 秩序;   public 才能;PolynomialSoluter (), {   ,,}//,才能检查输入项长度并生成增广矩阵   private 才能;boolean  init(双[][],matrixA,,双[],arrayB), {   ,,,order =, arrayB.length;   ,,,if  (matrixA.length  !=,顺序)   ,,,,,return 假;   ,,,matrix =, new 双(顺序)(order  +, 1);   ,,,for  (int 小姐:=,0;,小姐:& lt;,秩序;,我+ +),{   ,,,,,if  (matrixA[我].length  !=,顺序)   ,,,,,,,return 假;   ,,,,,for  (int  j =, 0;, j  & lt;,秩序;,j + +), {   ,,,,,,,矩阵[我][j],=, matrixA[我][j];   ,,,,,}   ,,,,,矩阵[我](秩序),=,arrayB[我];   ,,,}   ,,,result =, new 双(秩序);   ,,,return 真实;   ,,}   public 才能;双[],getResult(双[][],matrixA,,双[],arrayB), {   ,,,if  (! init (matrixA, arrayB))   ,,,,,return 零;   ,,,//,高斯消元——正向   ,,,for  (int 小姐:=,0;,小姐:& lt;,秩序;,我+ +),{   ,,,,,//,如果当前行对角线项为0则与后面的同列项非0的行交换   ,,,,,if  (! swithIfZero(我))   ,,,,,,,return 零;   ,,,,,//,消元   ,,,,,for  (int  j =,小姐:+,1;,j  & lt;,秩序;,j + +), {   ,,,,,,,if (矩阵[j],[我]==,0)   ,,,,,,,,,继续;   ,,,,,,,double  factor =,矩阵[j],[我]/,矩阵[我][我];   ,,,,,,,for  (int  l =,我,,l  & lt;, order  +, 1;, l + +)   ,,,,,,,,,矩阵[j] [l],=,矩阵[j] [l],安康;矩阵[我][l], *,因素;   ,,,,,}   ,,,}   ,,,//,高斯消元——反向——去掉了冗余计算   ,,,for  (int 小姐:=,order 作用;1;,小姐:祝辞=,0;,我——),{   ,,,,,结果[我],=,矩阵[我](秩序),/,矩阵[我][我];   ,,,,,for  (int  j =,小姐:安康;1;,j 祝辞,1;,j——)   ,,,,,,,矩阵[j](秩序),=,矩阵[j](秩序),安康;结果[我],*,矩阵[j][我];   ,,,}   ,,,return 结果;   ,,}   private 才能;boolean  swithIfZero (int 我),{   ,,,if (矩阵[我][我],==,0),{   ,,,,,int  j =,小姐:+,1;   ,,,,,//,找到对应位置非0的列   ,,,,,while  (j  & lt;, order ,,,矩阵[j][我],==,0)   ,,,,,,,+ +;   ,,,,,//,若对应位置全为0则无解   ,,,,,if  (==j 顺序)   ,,,,,,,return 假;   ,,,,,   ,,,,,,,switchRows (i, j);   ,,,}   ,,,return 真实;   ,,}   private 才能;void  switchRows (int 我,int  j), {   ,,,双[],tmp =,矩阵[我];   ,,,矩阵[我],=,矩阵[j];   ,,,矩阵[j],=, tmp;   ,,}   }

关于使用Java怎么求解一元n次多项式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

使用Java怎么求解一元n次多项式