Diag

対角を抽出する、または対角行列を構築します。

vector matrix::Diag(
  const int    ndiag=0      // 対角の数
  );
 
void matrix::Diag(
  const vector  v,          // 対角ベクトル
  const int    ndiag=0      // 対角の数
  );

パラメータ

v

[in] 要素が対応する対角に含まれるベクトル(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]
 */