Gauss.java
package Gauss;
/**
* @description TODO 父类,包含高斯列主元消去法和全主元消去法的共有属性和方法
* @author PengHao
* @date 2018年12月1日 上午9:44:40
*/
public class Gauss {
protected double[][] augmentedMatrix; // 增广矩阵
protected int n = 0; // n阶方阵
protected double[] root; // 方程组的根
protected int solution = 1; // 方程组解的个数,1唯一解,0无解,-1无穷解
/**
* @description TODO 构造方法,初始化各个属性
* @date 2018年12月1日 下午12:04:44
* @param A 增广矩阵
*/
public Gauss(double[][] A) {
this.n = A.length; // 方阵的阶数
this.augmentedMatrix = new double[n][n + 1]; // 申请内存
for (int i = 0; i < this.n; i++) {
System.arraycopy(A[i], 0, this.augmentedMatrix[i], 0, this.n + 1); // 拷贝A的第i行到augmentedMatrix的第i行,每行n+1个数据
}
}
/**
* @description TODO 将增广矩阵的两行互换,注意不是整行
* @date 2018年12月1日 下午1:33:45
* @param rowSmall 要交换的较小的行下标
* @param rowBig 要交换的较大的行下标
*/
protected void rowSwap(int rowSmall, int rowBig) {
for(int j = rowSmall; j <= this.n; j++) { // 将这两行的第rowSmall列至第n列交换
this.valueSwap(rowSmall, j, rowBig, j);
}
}
/**
* @description TODO 将增广矩阵的值交换
* @date 2018年12月1日 下午1:31:05
* @param rowOne 第1个值的行下标
* @param colOne 第1个值的列下标
* @param rowTwo 第2个值的行下标
* @param colTwo 第2个值的列下标
*/
protected void valueSwap(int rowOne, int colOne, int rowTwo, int colTwo) {
double temp = this.augmentedMatrix[rowOne][colOne];
this.augmentedMatrix[rowOne][colOne] = this.augmentedMatrix[rowTwo][colTwo];
this.augmentedMatrix[rowTwo][colTwo] = temp;
}
/**
* @description TODO 消元过程
* @date 2018年12月1日 下午1:48:45
* @param k 消去第k行第k列以下的元素
*/
protected void elimination(int k) {
double temp; // 记录第k列的第i行除以第k行的数,即倍数关系
for(int i = k + 1; i < this.n; i++) {
temp = this.augmented