'Solving a matrix equation in Java

enter image description here

I have been trying to implement the given formula in JAVA but i was unsuccessful. Can someone help me find what I am doing wrong? Do i need to shift the summation index and if so how?

My code:

public final class LinearSystem {
    
    private LinearSystem() {
        
    }
        
    public static int[] solve(int [][]A , int []y) {
        
        int n = A.length;
        
        int[] x = new int[n];
        
        for (int i = 0 ; i < n; i++) {
            
            x[i] = 0;
            int sum = 0;
            
            for(int k = i + 1 ; k == n; k++) {
                 sum +=  A[i][k]*x[k];  //  **java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3**
            }
            
            x[i] = 1/A[i][i] * (y[i] - sum);
        }
        
        return x;   
    }
    
    
    public static void main(String[] args) {
        
        int[][]A = new int[][]{{2,-1,-3},{0,4,-1},{0,0,3}};
    int [] y = new int[] {4,-1,23};
    System.out.println(Arrays.toString(solve(A,y))); **// awaited result [2, -3, 1]**
    }
    
}


Solution 1:[1]

First, you need the second loop to go until k < n, otherwise this throws the ArrayOutOfBounds Exceptions.

Second, you need to calculate your x in reverse order as @Dawood ibn Kareem said.

Also, you probably want x[] to be a double-array to not only get 0-values as result.

Solution 2:[2]

I am sorry I don't know much about math side so I couldn't fix it to the right solution but I noticed a few things wrong about your code.

1-You shouldn't initialize your arrays as integer arrays, because you will be doing integer division all over the place. For example 1/A[i][i] will result in 0 even if A[i][i] = 2

2-You shouldn't write k == n, if you do it like this then your for loop will only execute if k equals n, which is impossible for your case. I think you want to do k < n, which loops from i+1 to the point where k = n - 1

Here is my code:

import java.util.Arrays;

public final class LinearSystem {

    private LinearSystem() {

    }

    public static double[] solve(double [][]A , double []y) {

        int n = A.length;

        double[] x = new double[n];

        for (int i = 0 ; i < n; i++) {

            x[i] = 0;
            int sum = 0;

            for(int k = i + 1 ; k < n; k++) {
                sum +=  A[i][k] * x[k];  //  **java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3**
            }

            x[i] = 1/A[i][i] * (y[i] - sum);
        }

        return x;
    }


    public static void main(String[] args) {

        double[][]A = new double[][]{{2,-1,-3},{0,4,-1},{0,0,3}};
        double [] y = new double[] {4,-1,23};
        System.out.println(Arrays.toString(solve(A,y))); // awaited result [2, -3, 1]**
    }

}

Solution 3:[3]

Remember that arrays are indexed from 0, so the last element is at index n - 1, not n.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Alper Kaya
Solution 3 ndc85430