java实现解一元n次多项式(二)
来源:互联网 发布:caffe在windows安装 编辑:程序博客网 时间:2024/06/01 15:47
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; for (double[] arrayA : matrixA) if (arrayA.length != order) return false; matrix = matrixA; result = arrayB; 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; l++) matrix[j][l] -= matrix[i][l] * factor; result[j] -= result[i] * factor; } } // 高斯消元-反向-去掉了冗余计算 for (int i = order - 1; i >= 0; i--) { result[i] /= matrix[i][i]; for (int j = i - 1; j > -1; j--) result[j] -= result[i] * matrix[j][i]; } return result.clone(); } 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[] tmp1 = matrix[i]; matrix[i] = matrix[j]; matrix[j] = tmp1; double tmp2 = result[i]; result[i] = result[j]; result[j] = tmp2; } public static void main(String[] args) { double[][] matrixA = { { 0, 0, 1 }, { 0, 1, 0 }, { 1, 0, 0 } }; double[] arrayB = { 1, 3, 2 }; PolynomialSoluter ps = new PolynomialSoluter(); for (double result : ps.getResult(matrixA, arrayB)) System.out.println(result); }}
后来发现这个类要被调用太多次,但之前没考虑效率问题。所以重新写了这个类,之前的代码参考我之前的文章http://blog.csdn.net/strangerzz/article/details/45244249
主要就是去掉了数组里面赋值等操作,也不再生成增广矩阵了。虽然看起来比以前要难理解一下,但是效率应该会有所提升
0 0
- java实现解一元n次多项式(二)
- java实现解一元n次多项式
- 一元n次多项式的处理
- 一元n次多项式的处理
- 一元N次多项式的表示及相加
- 一元多项式的实现
- 数据结构的应用——一元N次多项式的加法
- java单链表实现一元多项式加法和乘法运算
- 链表一元多项式计算器的实现(Java语言描述)
- 一元多项式求和(Java链表实现)
- Java链表练习实现一元多项式的加法
- polynomial 一元多项式加法实现
- polynomial 一元多项式乘法实现
- 数据结构实现一元多项式相加
- 一元多项式--链表实现
- 一元多项式链表实现
- 一元多项式求和的实现
- 单链表实现一元多项式乘法
- linux下动态库so文件的一些认识
- lvs的优缺点
- qt中用mysql获取所有的数据库、数据库中的表名
- 我的代码
- 计算几何中的精度问题 转载自hust Erbao
- java实现解一元n次多项式(二)
- 关于PreparedStatement插入Date类型值会报错的问题
- 解决listview+viewpager+SwipeToRefreshLayout滑动冲突
- 运动检测(前景检测)之(二)混合高斯模型GMM
- IOS菜鸟的所感所思(二)——UIKit中的UIDynamicAnimator
- 5.zookeeper原理解析-数据存储之ZKDatabase
- Spark分布式计算和RDD模型研究
- 直接使用Sublime Text实现:HTTP访问URL+格式化返回的JSON字符串
- C++--函数,变量,数组底层表现