Kron

İki matrisin, matrisin ve vektörün, vektörün ve matrisin veya iki vektörün Kronecker çarpımını geri döndürür.

matrix matrix::Kron(
  const matrix&  b      // ikinci matris
   );
 
matrix matrix::Kron(
  const vector&  b      // vektör
   );
 
matrix vector::Kron(
  const matrix&  b      // matris
   );
 
matrix vector::Kron(
  const vector&  b      // ikinci vektör
   );
 

Parametreler

b

[in]  İkinci matris.

Geri dönüş değeri

Matris.

Not

Kronecker çarpımı aynı zamanda blok matris çarpımı olarak da adlandırılır.

 

MQL5'te iki matrisin Kronecker çarpımını hesaplamak için basit bir algoritma:

matrix MatrixKronecker(const matrixmatrix_a,const matrixmatrix_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=0m<Mm++)
      for(ulong n=0n<Nn++)
         for(ulong p=0p<Pp++)
            for(ulong q=0q<Qq++)
               matrix_c[m*P+p][n*Q+q]=matrix_a[m][n] * matrix_b[p][q];
 
   return(matrix_c);
  }

 

MQL5 örneği:

   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 örneği:

import numpy as np
 
A = np.arange(1,7).reshape(2,3)
B = np.identity(2)
V = [1,2]
print(np.kron(AB))
print("")
print(np.kron(AV))
 
[[102030.]
 [010203.]
 [405060.]
 [040506.]]
 
[[ 1  2  2  4  3  6]
 [ 4  8  5 10  6 12]]