📜  两个矩阵的克罗内克积的 C 程序

📅  最后修改于: 2022-05-13 01:54:35.035000             🧑  作者: Mango

两个矩阵的克罗内克积的 C 程序

给定一个{m} imes{n}     矩阵 A 和{p} imes{q}     矩阵 B,它们的克罗内克积C = A 张量 B,也称为它们的矩阵直积,是{(mp)} imes{(nq)}     矩阵。

A tensor B =  |a11B   a12B|
              |a21B   a22B|

= |a11b11   a11b12   a12b11  a12b12|
  |a11b21   a11b22   a12b21  a12b22| 
  |a11b31   a11b32   a12b31  a12b32|
  |a21b11   a21b12   a22b11  a22b12|
  |a21b21   a21b22   a22b21  a22b22|
  |a21b31   a21b32   a22b31  a22b32|

例子:

1. The matrix direct(kronecker) product of the 2×2 matrix A 
   and the 2×2 matrix B is given by the 4×4 matrix :

Input : A = 1 2    B = 0 5
            3 4        6 7

Output : C = 0  5  0  10
             6  7  12 14
             0  15 0  20
             18 21 24 28

2. The matrix direct(kronecker) product of the 2×3 matrix A 
   and the 3×2 matrix B is given by the 6×6 matrix :

Input : A = 1 2    B = 0 5 2
            3 4        6 7 3
            1 0

Output : C = 0      5    2    0     10    4    
             6      7    3   12     14    6    
             0     15    6    0     20    8    
            18     21    9   24     28   12    
             0      5    2    0      0    0    
             6      7    3    0      0    0    

下面是查找两个矩阵的克罗内克积并将其存储为矩阵 C 的代码:

C
// C code to find the Kronecker Product of two
// matrices and stores it as matrix C
#include 
 
// rowa and cola are no of rows and columns
// of matrix A
// rowb and colb are no of rows and columns
// of matrix B
const int cola = 2, rowa = 3, colb = 3, rowb = 2;
 
// Function to computes the Kronecker Product
// of two matrices
void Kroneckerproduct(int A[][cola], int B[][colb])
{
 
    int C[rowa * rowb][cola * colb];
 
    // i loops till rowa
    for (int i = 0; i < rowa; i++) {
 
        // k loops till rowb
        for (int k = 0; k < rowb; k++) {
 
            // j loops till cola
            for (int j = 0; j < cola; j++) {
 
                // l loops till colb
                for (int l = 0; l < colb; l++) {
 
                    // Each element of matrix A is
                    // multiplied by whole Matrix B
                    // resp and stored as Matrix C
                    C[i + l + 1][j + k + 1] = A[i][j] * B[k][l];
                    printf("%d    ", C[i + l + 1][j + k + 1]);
                }
            }
            printf("
");
        }
    }
}
 
// Driver Code
int main()
{
    int A[3][2] = { { 1, 2 }, { 3, 4 }, { 1, 0 } },
        B[2][3] = { { 0, 5, 2 }, { 6, 7, 3 } };
 
    Kroneckerproduct(A, B);
    return 0;
}


输出 :

0    5    2    0    10    4    
6    7    3    12   14    6    
0    15   6    0    20    8    
18   21   9    24   28    12    
0    5    2    0    0     0    
6    7    3    0    0     0

时间复杂度: O(rowa*cola*rowb*colb),因为我们使用的是嵌套循环。

辅助空间: O(rowa*cola*rowb*colb),因为我们在矩阵 C 中使用了额外的空间。

有关详细信息,请参阅有关两个矩阵的克罗内克积的完整文章!