Kron

返回两个矩阵的克罗内克(Kronecker)乘积,矩阵和向量,向量和矩阵、或两个向量。

matrix matrix::Kron(

  const matrix&  b      // 第二个矩阵

   );



matrix matrix::Kron(

  const vector&  b      // 向量

   );



matrix vector::Kron(

  const matrix&  b      // 矩阵

   );



matrix vector::Kron(

  const vector&  b      // 第二个向量

   );

 

参数

b

[输入]  第二个矩阵。

返回值

矩阵。

注意

克罗内克(Kronecker)乘积也称为块矩阵乘法。

以 MQL5 实现的两个矩阵克罗内克(Kronecker)乘积的简单算法:

matrix MatrixKronecker(const matrix& matrix_a,const matrix& matrix_b)

  {

   ulong  M=matrix_a.Rows();

   ulong  N=matrix_a.Cols();

   ulong  P=matrix_b.Rows();

   ulong  Q=matrix_b.Cols();

   matrix matrix_c(M*P,N*Q);



   for(ulong m=0; m<M; m++)

      for(ulong n=0; n<N; n++)

         for(ulong p=0; p<P; p++)

            for(ulong q=0; q<Q; q++)

               matrix_c[m*P+p][n*Q+q]=matrix_a[m][n] * matrix_b[p][q];



   return(matrix_c);

  }

MQL5 示例:

   matrix a={{1,2,3},{4,5,6}};

   matrix b=matrix::Identity(2,2);

   vector v={1,2};



   Print(a.Kron(b));

   Print(a.Kron(v));



  /*

   [[1,0,2,0,3,0]

    [0,1,0,2,0,3]

    [4,0,5,0,6,0]

    [0,4,0,5,0,6]]



   [[1,2,2,4,3,6]

    [4,8,5,10,6,12]]

  */

Python 示例:

import numpy as np



A = np.arange(1,7).reshape(2,3)

B = np.identity(2)

V = [1,2]

print(np.kron(A, B))

print("")

print(np.kron(A, V))



[[1. 0. 2. 0. 3. 0.]

 [0. 1. 0. 2. 0. 3.]

 [4. 0. 5. 0. 6. 0.]

 [0. 4. 0. 5. 0. 6.]]



[[ 1  2  2  4  3  6]

 [ 4  8  5 10  6 12]]