Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.*;
- public class SystemOfEquations {
- // x0 = 2
- // x1 = 3
- // x2 = 5
- // x3 = -2
- //
- // 4 5
- // 1 2 3 4 15
- // 8 7 2 -1 49
- // 4 -2 -3 0 -13
- // 0 4 3 2 23
- Scanner in = new Scanner(System.in);
- private void showSystem() {
- int n = in.nextInt();
- int m = in.nextInt();
- double[][] a = new double[n][m];
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < m; ++j) {
- a[i][j] = in.nextDouble();
- }
- }
- double[][] x = solve(a);
- out(x);
- }
- // 3
- // 1 2 14
- // 4 8 -5
- // 3 8 0
- private void showInverse() {
- int n = in.nextInt();
- double[][] a = new double[n][n];
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- a[i][j] = in.nextDouble();
- }
- }
- double[][] m = new double[n][2 * n];
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- m[i][j] = a[i][j];
- }
- m[i][i + n] = 1.0;
- }
- double[][] x = trans(solve(m));
- out(x);
- x = multiply(a, x);
- System.out.println();
- out(x);
- }
- private double[][] multiply(double[][] a, double[][] b) {
- double[][] c = new double[a.length][b[0].length];
- for (int i = 0; i < c.length; ++i) {
- for (int j = 0; j < c[i].length; ++j) {
- for (int k = 0; k < a[i].length; ++k) {
- c[i][j] += a[i][k] * b[k][j];
- }
- }
- }
- return c;
- }
- private void out(double[][] x) {
- if (x.length == 0) {
- return;
- }
- for (int i = 0; i < x.length; ++i) {
- for (int j = 0; j < x[i].length; ++j) {
- if (j != 0) {
- System.out.print(' ');
- }
- System.out.print(x[i][j]);
- }
- System.out.println();
- }
- }
- private double[][] solve(double[][] a) {
- int n = a.length;
- int m = a[0].length;
- for (int j = 0; j < n; ++j) {
- int best = j;
- for (int i = j + 1; i < n; ++i) {
- if (Math.abs(a[i][j]) > Math.abs(a[best][j])) {
- best = i;
- }
- }
- if (Math.abs(a[best][j]) < 1e-9) {
- System.out.println("Determinant is zero!");
- return new double[0][0];
- }
- double[] td = a[j];
- a[j] = a[best];
- a[best] = td;
- for (int i = j + 1; i < n; ++i) {
- double koef = a[i][j] / a[j][j];
- for (int k = j; k < m; ++k) {
- a[i][k] -= koef * a[j][k];
- }
- }
- }
- double[][] res = new double[m - n][n];
- for (int j = n - 1; j >= 0; --j) {
- for (int k = n; k < m; ++k) {
- double koef = a[j][k] / a[j][j];
- res[k - n][j] = koef;
- for (int i = j - 1; i >= 0; --i) {
- a[i][k] -= a[i][j] * koef;
- }
- }
- }
- return res;
- }
- private double[][] trans(double[][] a) {
- double[][] res = new double[a[0].length][a.length];
- for (int i = 0; i < res.length; ++i) {
- for (int j = 0; j < res[i].length; ++j) {
- res[i][j] = a[j][i];
- }
- }
- return res;
- }
- public static void main(String[] args) {
- new SystemOfEquations().showSystem();
- // new SystemOfEquations().showInverse();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement