user3124548
user3124548

Reputation:

Matrix calculation not working... very odd output Java

This is what I want to do when A is a square matrix.

P - is power. A & B are square matrices.

User will be asked to enter size of matrix A, and elements of matrix A and to what power they want to raise the matrix to. Once they input what power, and what elements my program is supposed to calculate this: (Assuming P = 5)

A^5 + A^4 + A^3 + A^2 + A

I have written a method that adds matrices a method that multiplies them, and a method that raises them to the power and they all work correctly.

The problem I am having is the final step which I showed above A^5 + A^4 + A^ 3...

This is where the problem gets even weirder, my program works when the elements in the matrix are all the same... such that a

2 2 2
2 2 2
2 2 2

matrix will give me the CORRECT output, BUT

1 2 3
4 5 6
7 8 9

matrix will give me the WRONG output and I have no idea why.

This is the method in which the problem is occuring

public static void addPowers(int [][] a, int[][] b, int p) {
    while( p != 1){
        b = addMatrices(powerMatrix(a,p), b)  ;
        addPowers(a,b,p-1) ;
        return ;
    }
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < b.length; j++) 
                System.out.print(b[i][j] + "\t") ;
                System.out.println();
        }

}

Just in case you ask, reason I have the recursive under a while loop is so it won't print over and over and over again.

Thanks for your time! :)

Edit: More clarifying information. addMatrices is a method that adds matrices with an two int[][] arguments. powerMatrix is a method that finds the power of a matrix with (int[][], int) arguments.

EDIT Methods being called...

public static int[][] multiplyMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length];
    int matrix[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) 
        {
            for (int l = 0; l < matrixA.length; l++)
            {
                sum += matrixA[i][l] * matrixB[l][j] ;
            }
            temp[i][j] = sum ;
            sum = 0 ;
        }
        }
    matrix = temp;
    return matrix ;
}


public static int[][] addMatrices(int matrixA[][], int matrixB[][]) {
    int temp[][] = new int[matrixA.length][matrixB.length]; 
    int sum = 0 ;

    for (int i = 0; i < matrixA.length; i++)
    {
        for (int j = 0; j < matrixB.length; j++) {
            {
                sum = matrixA[i][j] + matrixB[i][j] ;
            }
            temp[i][j] = sum ;
        }
    }
    return temp ;
}


public static int[][] powerMatrix (int[][] a, int p) {
    int[][] result = a;
    for (int n = 1; n < p; n++)
        result = multiplyMatrices(result, a);
    return result;
}

Upvotes: 0

Views: 200

Answers (1)

locoyou
locoyou

Reputation: 1697

In your addMatrices method, you should remove the third loop.

Like this:

for (int i = 0; i < matrixA.length; i++) {
    for (int j = 0; j < matrixA[i].length; j++) {
        temp[i][j] = matrixA[i][j] + matrixB[i][j] ;
    }
}

Upvotes: 1

Related Questions