Power

정사각 행렬을 정수 거듭제곱으로 올립니다.

matrix matrix::Power(
  const int  power      // power
   );

매개 변수

power

【in】 지수는 정수, 양수, 음수 또는 0일 수 있습니다.

반환값

행렬.

참조

결과 행렬은 원래 행렬과 크기가 같습니다. 0의 거듭제곱으로 증가하면 항등 행렬이 반환됩니다. 양의 거듭제곱 n은 원래 행렬이 자체적으로 n번 곱해짐을 의미합니다. 음의 거듭제곱 -n은 원래 행렬이 먼저 반전된 다음 반전된 행렬에 n번 곱해짐을 의미합니다.

 

MQL5에서 행렬을 거듭제곱하는 간단한 알고리즘:

bool MatrixPower(matrixcconst matrixaconst int power)
  {
//--- 행렬은 정사각형이어야 합니다.
   if(a.Rows()!=a.Cols())
      return(false);
//--- 결과 행렬의 크기는 정확히 동일합니다.
   ulong  rows=a.Rows();
   ulong  cols=a.Cols();
   matrix result(rows,cols);
//--- 0이 되면 항등 행렬을 반환합니다.
   if(power==0)
      result.Identity();
   else
     {
//--- 음의 차수의 경우 먼저 행렬을 반전시킵니다.
      if(power<0)
        {
         matrix inverted=a.Inv();
         result=inverted;
         for(int i=-1i>poweri--)
            result=result.MatMul(inverted);
        }
      else
        {
         result=a;
         for(int i=1i<poweri++)
            result=result.MatMul(a);
        }
     }
//---
   c=result;
   return(true);
  }

 

MQL5 예:

  matrix i= {{01}, {-10}};
  Print("i:\n"i);
 
  Print("i.Power(3):\n"i.Power(3));
 
  Print("i.Power(0):\n"i.Power(0));
 
  Print("i.Power(-3):\n"i.Power(-3));
 
  /*
  i:
  [[0,1]
   [-1,0]]
 
  i.Power(3):
  [[0,-1]
   [1,0]]
 
  i.Power(0):
  [[1,0]
   [0,1]]
 
  i.Power(-3):
  [[0, -1]
   [1,0]]
  */

 

파이썬 예:

import numpy as np
from numpy.linalg import matrix_power
 
# matrix equivof the imaginary unit
i = np.array([[01], [-10]]) 
print("i:\n",i)
 
# should = -i
print("matrix_power(i, 3) :\n",matrix_power(i3) )
 
print("matrix_power(i, 0):\n",matrix_power(i0))
 
# should = 1/(-i) = ibut wf.pelements
print("matrix_power(i, -3):\n",matrix_power(i, -3))
 
i:
 [[ 0  1]
 [-1  0]]
 
matrix_power(i3) :
 [[ 0 -1]
 [ 1  0]]
 
matrix_power(i0):
 [[1 0]
 [0 1]]
 
matrix_power(i, -3):
 [[ 0.  1.]
 [-1.  0.]]