ReplaceToZero

行列やベクトル内の小さな値をゼロに置き換え、置き換えた要素の数を返します。

ulong vector::ReplaceToZero(
  const double  abs_tol      // 絶対許容値
  );
 
ulong vectorf::ReplaceToZero(
  const float   abs_tol      // 絶対許容値
  );
 
ulong vectorc::ReplaceToZero(
  const double  abs_tol      // 絶対許容値
  );
 
ulong vectorcf::ReplaceToZero(
  const float   abs_tol      // 絶対許容値
  );
 
ulong matrix::ReplaceToZero(
  const double  abs_tol      // 絶対許容値
  );
 
ulong matrixf::ReplaceToZero(
  const float   abs_tol      // 絶対許容値
  );
 
ulong matrixc::ReplaceToZero(
  const double  abs_tol      // 絶対許容値
  );
 
ulong matrixcf::ReplaceToZero(
  const float   abs_tol      // 絶対許容値
  );

パラメータ

abs_tol

[in]  ベクトル/行列の要素と比較する絶対許容値。ベクトル/行列の絶対値が絶対許容値以下の場合、その要素はゼロに置き換えられます。複素数の場合は、複素数の大きさ(sqrt(value.real*value.real + value.imag*value.imag))を絶対許容値と比較します。

戻り値

ゼロに置き換えられた行列/ベクトル内の小さい要素の数。

  matrixf a={{ 1, 1, 2, 3, 4},
             { 1, 2, 5, 6, 7},
             { 2, 5, 3, 9,10},
             { 3, 6, 9, 4, 5},
             { 4, 7,10, 5, 5}};
  matrixf ai=a.Inv();
//--- 結果の行列は単位行列である必要がある
  matrixf aai=a@ai;
  Print(aai);
//--- 小さな値を置き換える
  ulong replaced=aai.ReplaceToZero(1e-5);
  Print("replaced=",replaced);
//--- より単位行列のように見える
  Print(aai);
 
 /*
[[0.99999976,0,0,-2.3841858e-07,0]
[-4.1723251e-07,1,1.8626451e-09,-5.9604645e-08,2.3841858e-07]
[-1.0728836e-06,-1.1920929e-07,0.99999994,-8.3446503e-07,4.7683716e-07]
[-2.9802322e-07,5.9604645e-08,-3.9115548e-08,0.99999958,0]
[-5.9604645e-08,-5.9604645e-08,4.2840838e-08,-6.5565109e-07,1.0000002]]
replaced=20
[[0.99999976,0,0,0,0]
[0,1,0,0,0]
[0,0,0.99999994,0,0]
[0,0,0,0.99999958,0]
[0,0,0,0,1.0000002]]
 */