Diag

대각선을 추출하거나 대각선 행렬을 구성합니다.

vector matrix::Diag(
  const int     ndiag=0      // 대각선의 수
   );
 
void matrix::Diag(
  const vector  v,           // 대각 벡터
  const int     ndiag=0      // 대각선의 수
   );

매개 변수

v

자신의 요소가 해당 대각선에 포함되는 벡터입니다(ndiag=0이 주 대각선임).

ndiag=0

[in]  문제의 대각선. 기본값은 0입니다. 주대각선 위의 대각선에는 ndiag>0을 사용하고 주대각선 아래의 대각선에는 ndiag<0을 사용합니다.

 

참조

할당되지 않은 행렬(차원이 없음)에 대해 대각선을 설정할 수 있습니다. 이 경우 대각선 벡터의 크기에 해당하는 크기의 제로 행렬이 생성되고 이후 해당 대각선에 벡터 값이 채워집니다. 대각선이 이미 존재하는 행렬로 설정된 경우 행렬 차원은 변경되지 않으며 대각선 벡터 외부의 행렬 요소의 값은 변경되지 않습니다.

   vector v1={1,2,3};
   matrix m1;
   m1.Diag(v1);
   Print("m1\n",m1);
   matrix m2;
   m2.Diag(v1,-1);
   Print("m2\n",m2);
   matrix m3;
   m3.Diag(v1,1);
   Print("m3\n",m3);
   matrix m4=matrix::Full(4,5,9);
   m4.Diag(v1,1);
   Print("m4\n",m4);
   
   Print("diag -1 - ",m4.Diag(-1));
   Print("diag 0 - ",m4.Diag());
   Print("diag 1 - ",m4.Diag(1));
 
  /*
 
  m1
  [[1,0,0]
  [0,2,0]
  [0,0,3]]
  m2
  [[0,0,0]
  [1,0,0]
  [0,2,0]
  [0,0,3]]
  m3
  [[0,1,0,0]
  [0,0,2,0]
  [0,0,0,3]]
  m4
  [[9,1,9,9,9]
  [9,9,2,9,9]
  [9,9,9,3,9]
  [9,9,9,9,9]]
  diag -1 - [9,9,9]
  diag 0 - [9,9,9,9]
  diag 1 - [1,2,3,9]
  */