The following code multiplies two matrices of different orders and returns results i.e mat1 (6x3) * mat2 (3x6) and returns 6x6 matrix in dest
The problem is the result doesn't match with the calculated value. Additionally, if you observe the results mat2 is changing its contents.
PS: iterals: 3, 0, 1 mat1[3][1] = 0.000000 mat2[1][0] = 20.000000 dest[3][0] = 0.000000
The original content of mat2[1][0] was zero.
OUTPUT:
iterals: 0, 0, 0 mat1[0][0] = 10.000000 mat2[0][0] = 1.000000 dest[0][0] = 10.000000
iterals: 0, 0, 1 mat1[0][1] = 0.000000 mat2[1][0] = 0.000000 dest[0][0] = 10.000000
iterals: 0, 0, 2 mat1[0][2] = 0.000000 mat2[2][0] = 0.000000 dest[0][0] = 10.000000
iterals: 0, 1, 0 mat1[0][0] = 10.000000 mat2[0][1] = 0.000000 dest[0][1] = 0.000000
iterals: 0, 1, 1 mat1[0][1] = 0.000000 mat2[1][1] = 0.000000 dest[0][1] = 0.000000
iterals: 0, 1, 2 mat1[0][2] = 0.000000 mat2[2][1] = 0.000000 dest[0][1] = 0.000000
iterals: 0, 2, 0 mat1[0][0] = 10.000000 mat2[0][2] = 0.000000 dest[0][2] = 0.000000
iterals: 0, 2, 1 mat1[0][1] = 0.000000 mat2[1][2] = 1.000000 dest[0][2] = 0.000000
iterals: 0, 2, 2 mat1[0][2] = 0.000000 mat2[2][2] = 0.000000 dest[0][2] = 0.000000
iterals: 0, 3, 0 mat1[0][0] = 10.000000 mat2[0][3] = 0.000000 dest[0][3] = 0.000000
iterals: 0, 3, 1 mat1[0][1] = 0.000000 mat2[1][3] = 0.000000 dest[0][3] = 0.000000
iterals: 0, 3, 2 mat1[0][2] = 0.000000 mat2[2][3] = 0.000000 dest[0][3] = 0.000000
iterals: 0, 4, 0 mat1[0][0] = 10.000000 mat2[0][4] = 0.000000 dest[0][4] = 0.000000
iterals: 0, 4, 1 mat1[0][1] = 0.000000 mat2[1][4] = 0.000000 dest[0][4] = 0.000000
iterals: 0, 4, 2 mat1[0][2] = 0.000000 mat2[2][4] = 1.000000 dest[0][4] = 0.000000
iterals: 0, 5, 0 mat1[0][0] = 10.000000 mat2[0][5] = 0.000000 dest[0][5] = 0.000000
iterals: 0, 5, 1 mat1[0][1] = 0.000000 mat2[1][5] = 0.000000 dest[0][5] = 0.000000
iterals: 0, 5, 2 mat1[0][2] = 0.000000 mat2[2][5] = 0.000000 dest[0][5] = 0.000000
iterals: 1, 0, 0 mat1[1][0] = 0.000000 mat2[0][0] = 1.000000 dest[1][0] = 0.000000
iterals: 1, 0, 1 mat1[1][1] = 0.000000 mat2[1][0] = 0.000000 dest[1][0] = 0.000000
iterals: 1, 0, 2 mat1[1][2] = 0.000000 mat2[2][0] = 0.000000 dest[1][0] = 0.000000
iterals: 1, 1, 0 mat1[1][0] = 0.000000 mat2[0][1] = 0.000000 dest[1][1] = 0.000000
iterals: 1, 1, 1 mat1[1][1] = 0.000000 mat2[1][1] = 0.000000 dest[1][1] = 0.000000
iterals: 1, 1, 2 mat1[1][2] = 0.000000 mat2[2][1] = 0.000000 dest[1][1] = 0.000000
iterals: 1, 2, 0 mat1[1][0] = 0.000000 mat2[0][2] = 0.000000 dest[1][2] = 0.000000
iterals: 1, 2, 1 mat1[1][1] = 0.000000 mat2[1][2] = 1.000000 dest[1][2] = 0.000000
iterals: 1, 2, 2 mat1[1][2] = 0.000000 mat2[2][2] = 0.000000 dest[1][2] = 0.000000
iterals: 1, 3, 0 mat1[1][0] = 0.000000 mat2[0][3] = 0.000000 dest[1][3] = 0.000000
iterals: 1, 3, 1 mat1[1][1] = 0.000000 mat2[1][3] = 0.000000 dest[1][3] = 0.000000
iterals: 1, 3, 2 mat1[1][2] = 0.000000 mat2[2][3] = 0.000000 dest[1][3] = 0.000000
iterals: 1, 4, 0 mat1[1][0] = 0.000000 mat2[0][4] = 0.000000 dest[1][4] = 0.000000
iterals: 1, 4, 1 mat1[1][1] = 0.000000 mat2[1][4] = 0.000000 dest[1][4] = 0.000000
iterals: 1, 4, 2 mat1[1][2] = 0.000000 mat2[2][4] = 1.000000 dest[1][4] = 0.000000
iterals: 1, 5, 0 mat1[1][0] = 0.000000 mat2[0][5] = 0.000000 dest[1][5] = 0.000000
iterals: 1, 5, 1 mat1[1][1] = 0.000000 mat2[1][5] = 0.000000 dest[1][5] = 0.000000
iterals: 1, 5, 2 mat1[1][2] = 0.000000 mat2[2][5] = 0.000000 dest[1][5] = 0.000000
iterals: 2, 0, 0 mat1[2][0] = 0.000000 mat2[0][0] = 0.000000 dest[2][0] = 0.000000
iterals: 2, 0, 1 mat1[2][1] = 20.000000 mat2[1][0] = 0.000000 dest[2][0] = 0.000000
iterals: 2, 0, 2 mat1[2][2] = 0.000000 mat2[2][0] = 0.000000 dest[2][0] = 0.000000
iterals: 2, 1, 0 mat1[2][0] = 0.000000 mat2[0][1] = 0.000000 dest[2][1] = 0.000000
iterals: 2, 1, 1 mat1[2][1] = 20.000000 mat2[1][1] = 0.000000 dest[2][1] = 0.000000
iterals: 2, 1, 2 mat1[2][2] = 0.000000 mat2[2][1] = 0.000000 dest[2][1] = 0.000000
iterals: 2, 2, 0 mat1[2][0] = 0.000000 mat2[0][2] = 0.000000 dest[2][2] = 0.000000
iterals: 2, 2, 1 mat1[2][1] = 20.000000 mat2[1][2] = 1.000000 dest[2][2] = 20.000000
iterals: 2, 2, 2 mat1[2][2] = 0.000000 mat2[2][2] = 0.000000 dest[2][2] = 20.000000
iterals: 2, 3, 0 mat1[2][0] = 0.000000 mat2[0][3] = 0.000000 dest[2][3] = 0.000000
iterals: 2, 3, 1 mat1[2][1] = 20.000000 mat2[1][3] = 0.000000 dest[2][3] = 0.000000
iterals: 2, 3, 2 mat1[2][2] = 0.000000 mat2[2][3] = 0.000000 dest[2][3] = 0.000000
iterals: 2, 4, 0 mat1[2][0] = 0.000000 mat2[0][4] = 0.000000 dest[2][4] = 0.000000
iterals: 2, 4, 1 mat1[2][1] = 20.000000 mat2[1][4] = 0.000000 dest[2][4] = 0.000000
iterals: 2, 4, 2 mat1[2][2] = 0.000000 mat2[2][4] = 1.000000 dest[2][4] = 0.000000
iterals: 2, 5, 0 mat1[2][0] = 0.000000 mat2[0][5] = 0.000000 dest[2][5] = 0.000000
iterals: 2, 5, 1 mat1[2][1] = 20.000000 mat2[1][5] = 0.000000 dest[2][5] = 0.000000
iterals: 2, 5, 2 mat1[2][2] = 0.000000 mat2[2][5] = 0.000000 dest[2][5] = 0.000000
iterals: 3, 0, 0 mat1[3][0] = 0.000000 mat2[0][0] = 0.000000 dest[3][0] = 0.000000
iterals: 3, 0, 1 mat1[3][1] = 0.000000 mat2[1][0] = 20.000000 dest[3][0] = 0.000000
iterals: 3, 0, 2 mat1[3][2] = 0.000000 mat2[2][0] = 0.000000 dest[3][0] = 0.000000
iterals: 3, 1, 0 mat1[3][0] = 0.000000 mat2[0][1] = 0.000000 dest[3][1] = 0.000000
iterals: 3, 1, 1 mat1[3][1] = 0.000000 mat2[1][1] = 0.000000 dest[3][1] = 0.000000
iterals: 3, 1, 2 mat1[3][2] = 0.000000 mat2[2][1] = 0.000000 dest[3][1] = 0.000000
iterals: 3, 2, 0 mat1[3][0] = 0.000000 mat2[0][2] = 0.000000 dest[3][2] = 0.000000
iterals: 3, 2, 1 mat1[3][1] = 0.000000 mat2[1][2] = 0.000000 dest[3][2] = 0.000000
iterals: 3, 2, 2 mat1[3][2] = 0.000000 mat2[2][2] = 0.000000 dest[3][2] = 0.000000
iterals: 3, 3, 0 mat1[3][0] = 0.000000 mat2[0][3] = 0.000000 dest[3][3] = 0.000000
iterals: 3, 3, 1 mat1[3][1] = 0.000000 mat2[1][3] = 0.000000 dest[3][3] = 0.000000
iterals: 3, 3, 2 mat1[3][2] = 0.000000 mat2[2][3] = 0.000000 dest[3][3] = 0.000000
iterals: 3, 4, 0 mat1[3][0] = 0.000000 mat2[0][4] = 0.000000 dest[3][4] = 0.000000
iterals: 3, 4, 1 mat1[3][1] = 0.000000 mat2[1][4] = 0.000000 dest[3][4] = 0.000000
iterals: 3, 4, 2 mat1[3][2] = 0.000000 mat2[2][4] = 1.000000 dest[3][4] = 0.000000
iterals: 3, 5, 0 mat1[3][0] = 0.000000 mat2[0][5] = 0.000000 dest[3][5] = 0.000000
iterals: 3, 5, 1 mat1[3][1] = 0.000000 mat2[1][5] = 0.000000 dest[3][5] = 0.000000
iterals: 3, 5, 2 mat1[3][2] = 0.000000 mat2[2][5] = 0.000000 dest[3][5] = 0.000000
iterals: 4, 0, 0 mat1[4][0] = 0.000000 mat2[0][0] = 0.000000 dest[4][0] = 0.000000
iterals: 4, 0, 1 mat1[4][1] = 0.000000 mat2[1][0] = 20.000000 dest[4][0] = 0.000000
iterals: 4, 0, 2 mat1[4][2] = 30.000000 mat2[2][0] = 0.000000 dest[4][0] = 0.000000
iterals: 4, 1, 0 mat1[4][0] = 0.000000 mat2[0][1] = 0.000000 dest[4][1] = 0.000000
iterals: 4, 1, 1 mat1[4][1] = 0.000000 mat2[1][1] = 0.000000 dest[4][1] = 0.000000
iterals: 4, 1, 2 mat1[4][2] = 30.000000 mat2[2][1] = 0.000000 dest[4][1] = 0.000000
iterals: 4, 2, 0 mat1[4][0] = 0.000000 mat2[0][2] = 0.000000 dest[4][2] = 0.000000
iterals: 4, 2, 1 mat1[4][1] = 0.000000 mat2[1][2] = 0.000000 dest[4][2] = 0.000000
iterals: 4, 2, 2 mat1[4][2] = 30.000000 mat2[2][2] = 0.000000 dest[4][2] = 0.000000
iterals: 4, 3, 0 mat1[4][0] = 0.000000 mat2[0][3] = 0.000000 dest[4][3] = 0.000000
iterals: 4, 3, 1 mat1[4][1] = 0.000000 mat2[1][3] = 0.000000 dest[4][3] = 0.000000
iterals: 4, 3, 2 mat1[4][2] = 30.000000 mat2[2][3] = 0.000000 dest[4][3] = 0.000000
iterals: 4, 4, 0 mat1[4][0] = 0.000000 mat2[0][4] = 0.000000 dest[4][4] = 0.000000
iterals: 4, 4, 1 mat1[4][1] = 0.000000 mat2[1][4] = 0.000000 dest[4][4] = 0.000000
iterals: 4, 4, 2 mat1[4][2] = 30.000000 mat2[2][4] = 0.000000 dest[4][4] = 0.000000
iterals: 4, 5, 0 mat1[4][0] = 0.000000 mat2[0][5] = 0.000000 dest[4][5] = 0.000000
iterals: 4, 5, 1 mat1[4][1] = 0.000000 mat2[1][5] = 0.000000 dest[4][5] = 0.000000
iterals: 4, 5, 2 mat1[4][2] = 30.000000 mat2[2][5] = 0.000000 dest[4][5] = 0.000000
iterals: 5, 0, 0 mat1[5][0] = 0.000000 mat2[0][0] = 0.000000 dest[5][0] = 0.000000
iterals: 5, 0, 1 mat1[5][1] = 0.000000 mat2[1][0] = 20.000000 dest[5][0] = 0.000000
iterals: 5, 0, 2 mat1[5][2] = 0.000000 mat2[2][0] = 0.000000 dest[5][0] = 0.000000
iterals: 5, 1, 0 mat1[5][0] = 0.000000 mat2[0][1] = 0.000000 dest[5][1] = 0.000000
iterals: 5, 1, 1 mat1[5][1] = 0.000000 mat2[1][1] = 0.000000 dest[5][1] = 0.000000
iterals: 5, 1, 2 mat1[5][2] = 0.000000 mat2[2][1] = 0.000000 dest[5][1] = 0.000000
iterals: 5, 2, 0 mat1[5][0] = 0.000000 mat2[0][2] = 0.000000 dest[5][2] = 0.000000
iterals: 5, 2, 1 mat1[5][1] = 0.000000 mat2[1][2] = 0.000000 dest[5][2] = 0.000000
iterals: 5, 2, 2 mat1[5][2] = 0.000000 mat2[2][2] = 0.000000 dest[5][2] = 0.000000
iterals: 5, 3, 0 mat1[5][0] = 0.000000 mat2[0][3] = 0.000000 dest[5][3] = 0.000000
iterals: 5, 3, 1 mat1[5][1] = 0.000000 mat2[1][3] = 0.000000 dest[5][3] = 0.000000
iterals: 5, 3, 2 mat1[5][2] = 0.000000 mat2[2][3] = 0.000000 dest[5][3] = 0.000000
iterals: 5, 4, 0 mat1[5][0] = 0.000000 mat2[0][4] = 0.000000 dest[5][4] = 0.000000
iterals: 5, 4, 1 mat1[5][1] = 0.000000 mat2[1][4] = 0.000000 dest[5][4] = 0.000000
iterals: 5, 4, 2 mat1[5][2] = 0.000000 mat2[2][4] = 0.000000 dest[5][4] = 0.000000
iterals: 5, 5, 0 mat1[5][0] = 0.000000 mat2[0][5] = 0.000000 dest[5][5] = 0.000000
iterals: 5, 5, 1 mat1[5][1] = 0.000000 mat2[1][5] = 0.000000 dest[5][5] = 0.000000
iterals: 5, 5, 2 mat1[5][2] = 0.000000 mat2[2][5] = 0.000000 dest[5][5] = 0.000000
Here is the source code:
#include<stdio.h>
void prod(float mat1[][6], float mat2[][6], float dest[][6], int m1, int n1, int n2) {
printf("orders: %d, %d, %d\n", m1, n1, n2);
int i, j, k; // kmax = n1, jmax = n2, imax = m1
for (i = 0; i < m1; i++) {
for (j = 0; j < n2; j++) {
dest[i][j] = 0;
for (k = 0; k < n1; k++) {
dest[i][j] += mat1[i][k]*mat2[k][j];
printf("iterals: %d, %d, %d\t", i, j, k);
printf("mat1[%d][%d] = %f\t", i, k, mat1[i][k]);
printf("mat2[%d][%d] = %f\t", k, j, mat2[k][j]);
printf("dest[%d][%d] = %f\n", i, j, dest[i][j]);
}
}
}
}
void main() {
float res[][6] = { 0 };
float G[][6] = { {10, 0, 0},
{ 0, 0, 0},
{ 0, 20, 0},
{ 0, 0, 0},
{ 0, 0, 30},
{ 0, 0, 0} };
float H[][6] = { {1, 0, 0, 0, 0, 0},
{0, 0, 1, 0, 0, 0},
{0, 0, 0, 0, 1, 0} };
prod(G, H, res, 6, 3, 6);
}