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
| public class 列主元消元法 { public static double[][] ListPrincipal(double[][] matrix) { for (int k = 0; k < matrix[0].length - 2; k++) { matrix = changeMatrixOrder(matrix, k); System.out.println(Arrays.deepToString(matrix)); for (int j = k + 1; j < matrix.length; j++) { double temp = -matrix[j][k] / matrix[k][k]; for (int i = 0; i < matrix[0].length; i++) { matrix[j][i] += matrix[k][i] * temp; } } } System.out.println(Arrays.deepToString(matrix)); for (int k = matrix.length - 1; k >= 0; k--) { for (int j = k + 1; j <= matrix[0].length - 2; j++) { matrix[k][matrix[0].length - 1] = matrix[k][matrix[0].length - 1] - matrix[k][j] * matrix[j][j]; } matrix[k][k] = matrix[k][matrix[0].length - 1] / matrix[k][k]; } return matrix; }
static double[][] changeMatrixOrder(double[][] matrix, int k) { int originalIndex = k; int maxIndex = k; double[] temp; double Max = Math.abs(matrix[k][k]); for (int i = k + 1; i < matrix.length; i++) { if (Math.abs(matrix[i][k]) > Max) { maxIndex = i; } } temp = matrix[originalIndex]; matrix[originalIndex] = matrix[maxIndex]; matrix[maxIndex] = temp;
return matrix; }
public static void main(String[] args) { double[][] matrix = {{2, 1, -0.1, 1, 2.7}, {0.4, 0.5, 4, -8.5, 21.9}, {0.3, -1, 1, 5.2, -3.9}, {1, 0.2, 2.5, -1, 9.9}}; System.out.println(Arrays.deepToString(matrix)); matrix = ListPrincipal(matrix); for (int k = 0; k < matrix.length; k++) { System.out.format("x%d = %.2f\n", k + 1, matrix[k][k]); } } }
|