Java Program to Find Inverse of a Matrix

This is the java program to find the inverse of square invertible matrix. The matrix is invertible if its determinant is non zero.

Here is the source code of the Java Program to Find Inverse of a Matrix. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is sample program to find the inverse of a matrix
 
import java.util.Scanner;
 
public class Inverse 
{
    public static void main(String argv[]) 
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the dimension of square matrix: ");
        int n = input.nextInt();
        double a[][]= new double[n][n];
        System.out.println("Enter the elements of matrix: ");
        for(int i=0; i<n; i++)
            for(int j=0; j<n; j++)
                a[i][j] = input.nextDouble();
 
        double d[][] = invert(a);
 
        System.out.println("The inverse is: ");
        for (int i=0; i<n; ++i) 
        {
            for (int j=0; j<n; ++j)
            {
                System.out.print(d[i][j]+"  ");
            }
            System.out.println();
        }
        input.close();
    }	
 
    public static double[][] invert(double a[][]) 
    {
        int n = a.length;
        double x[][] = new double[n][n];
        double b[][] = new double[n][n];
        int index[] = new int[n];
        for (int i=0; i<n; ++i) 
            b[i][i] = 1;
 
 // Transform the matrix into an upper triangle
        gaussian(a, index);
 
 // Update the matrix b[i][j] with the ratios stored
        for (int i=0; i<n-1; ++i)
            for (int j=i+1; j<n; ++j)
                for (int k=0; k<n; ++k)
                    b[index[j]][k]
                    	    -= a[index[j]][i]*b[index[i]][k];
 
 // Perform backward substitutions
        for (int i=0; i<n; ++i) 
        {
            x[n-1][i] = b[index[n-1]][i]/a[index[n-1]][n-1];
            for (int j=n-2; j>=0; --j) 
            {
                x[j][i] = b[index[j]][i];
                for (int k=j+1; k<n; ++k) 
                {
                    x[j][i] -= a[index[j]][k]*x[k][i];
                }
                x[j][i] /= a[index[j]][j];
            }
        }
        return x;
    }
 
// Method to carry out the partial-pivoting Gaussian
// elimination.  Here index[] stores pivoting order.
 
    public static void gaussian(double a[][], int index[]) 
    {
        int n = index.length;
        double c[] = new double[n];
 
 // Initialize the index
        for (int i=0; i<n; ++i) 
            index[i] = i;
 
 // Find the rescaling factors, one from each row
        for (int i=0; i<n; ++i) 
        {
            double c1 = 0;
            for (int j=0; j<n; ++j) 
            {
                double c0 = Math.abs(a[i][j]);
                if (c0 > c1) c1 = c0;
            }
            c[i] = c1;
        }
 
 // Search the pivoting element from each column
        int k = 0;
        for (int j=0; j<n-1; ++j) 
        {
            double pi1 = 0;
            for (int i=j; i<n; ++i) 
            {
                double pi0 = Math.abs(a[index[i]][j]);
                pi0 /= c[index[i]];
                if (pi0 > pi1) 
                {
                    pi1 = pi0;
                    k = i;
                }
            }
 
   // Interchange rows according to the pivoting order
            int itmp = index[j];
            index[j] = index[k];
            index[k] = itmp;
            for (int i=j+1; i<n; ++i) 	
            {
                double pj = a[index[i]][j]/a[index[j]][j];
 
 // Record pivoting ratios below the diagonal
                a[index[i]][j] = pj;
 
 // Modify other elements accordingly
                for (int l=j+1; l<n; ++l)
                    a[index[i]][l] -= pj*a[index[j]][l];
            }
        }
    }
}

Output:

$ javac Inverse.java
$ java Inverse
Enter the dimension of square matrix: 
2
Enter the elements of matrix: 
1 2 
3 4 
The Inverse is: 
-1.9999999999999998  1.0  
1.4999999999999998  -0.49999999999999994

Related posts:

Java Program to Implement Bit Array
Calling Stored Procedures from Spring Data JPA Repositories
Exploring the New Spring Cloud Gateway
Setting the Java Version in Maven
Serverless Functions with Spring Cloud Function
Converting Between Byte Arrays and Hexadecimal Strings in Java
Creating a Generic Array in Java
Java Program to Perform Naive String Matching
Java Program to Check Whether it is Weakly Connected or Strongly Connected for a Directed Graph
Kiểu dữ liệu Ngày Giờ (Date Time) trong java
Deque và ArrayDeque trong Java
Hướng dẫn sử dụng luồng vào ra nhị phân trong Java
Beans and Dependency Injection
Server-Sent Events in Spring
Apache Commons Collections OrderedMap
Exploring the Spring Boot TestRestTemplate
How to Read a Large File Efficiently with Java
Lấy ngày giờ hiện tại trong Java
Java Program to Implement a Binary Search Tree using Linked Lists
Converting Between a List and a Set in Java
Java Program to Implement Stack
Java Program to Implement Jarvis Algorithm
Java Program to Implement Hash Tables chaining with Singly Linked Lists
Java Program to Implement Vector API
Hướng dẫn Java Design Pattern – Singleton
Java Program to Find Transpose of a Graph Matrix
Guide to @ConfigurationProperties in Spring Boot
Java Program to Perform LU Decomposition of any Matrix
Java Program to Generate All Possible Combinations Out of a, b, c, d, e
Converting Strings to Enums in Java
Disable DNS caching
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint