C++程序 矩阵的Kronecker积

C++程序 矩阵的Kronecker积

给定一个 mimesn矩阵 A 和一个pimesq矩阵 B,它们的 Kornecker 积 C=A tensor 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. 2×2矩阵A
与2×2矩阵B的矩阵直积(Kronecker积)为4×4矩阵 :

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

  1. 2×3矩阵A
    与3×2矩阵B的矩阵直积(Kronecker积)为6×6矩阵 :

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

下面是找到两个矩阵的 Kronecker积 并将其存储为矩阵C的代码:

// C++代码来计算两个矩阵的克罗内克积,并将其存储在矩阵C中
#include <iostream>
using namespace std;
 
// rowa和cola是矩阵A的行数和列数
// rowb和colb是矩阵B的行数和列数
const int cola=2, rowa=3, colb=3, rowb=2;
 
// 计算两个矩阵的克罗内克积的函数
void Kroneckerproduct(int A[][cola], int B[][colb])
{
 
    int C[rowa * rowb][cola * colb];
 
    // i循环直到rowa
    for (int i = 0; i < rowa; i++) {
 
        // k循环直到rowb
        for (int k = 0; k < rowb; k++) {
 
            // j循环直到cola
            for (int j = 0; j < cola; j++) {
 
                // l循环直到colb
                for (int l = 0; l < colb; l++) {
 
                    // 矩阵A的每个元素都乘以整个矩阵B
                    // 作为Matrix C存储
                    C[i + l + 1][j + k + 1] = A[i][j] * B[k][l];
                    cout << C[i + l + 1][j + k + 1] << " ";
                }
            }
            cout << endl;
        }
    }
}
 
// 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中使用额外的空间。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

C++ 示例