когда-то давно лаба такая была код рабочий, но не красивый)
| Код | public class Gauss { private int n; private double a[][]; private double b[]; Gauss(int n, double a[][], double b[]) { this.n = n; this.a = a; this.b = b; } public void gauss_method() { for (int i = 0 ; i < n; i++) { if (test1(a, b) == 2) return; if (testNull(i, a) == 3) return; setOne(i, a, b); setToFirst(i, a, b); } getX(a, b); } void printMatrix(double a[][]) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) System.out.print(a[i][j] + " "); System.out.print(b[i]); System.out.println(); } System.out.println(); } private int test1(double a[][], double b[]) { int k; for (int i = 0; i < n; i++) { k = 0; for (int j = 0; j < n; j++) { if (a[i][j] == 0) k++; } if (k == 3 && b[i] != 0) { System.out.println("Нет решений"); System.out.println(); return 2; } } return 1; } private int testNull(int k, double a[][]) { int j = k; double temp; while (a[k][j] == 0) { j++; if (j == n - 1) { System.out.println("Деление на ноль"); return 3; } for (int i = k; i < n; i++) { temp = a[k][i]; a[k][i] = a[j][i]; a[j][i] = temp; temp = b[k]; b[k] = b[j]; b[j] = temp; } } return 1; } private void setOne(int k, double[][] a, double[] b) { try { for (int i = k + 1; i < n; i++) a[k][i] = a[k][i] / a[k][k]; b[k] = b[k] / a[k][k]; } catch (Exception e) { System.out.println("sfdsf"); } a[k][k] = 1; } private void setToFirst(int k, double[][] a, double[] b) { for (int i = k + 1 ;i < n; i++ ) { for (int j = k + 1; j < n; j++) { a[i][j] = a[i][j] / a[i][k] - a[k][j]; } b[i] = b[i] / a[i][k] - b[k]; a[i][k] = 0; } } public double[] getX(double a[][], double b[]) { double[] x = new double[n]; double[] no = new double[1]; if (a[n-1][n-1] != 0) { x[n-1] = b[n-1] / a[n-1][n-1]; } else { if (b[n-1] != 0) { System.out.println("Нет решений"); no[0] = 2; return no; } else { System.out.println("Бесконечно решений"); no[0] = 3; return no; } } for (int i = n - 2; i >= 0; i--) { for (int j = n-1; j > i; j--) { b[i] = b[i] - a[i][j] * x[j]; } x[i] = b[i] / a[i][i]; } for (int i = 0; i < n; i++) { System.out.println("x[" + (i+1) + "] = " + x[i]); } System.out.println(); return x; } }
|
|