Compare

指定された精度で2つの行列/ベクトルの要素を比較します。

ulong vector::Compare(
  const vector& vec,         // 比較するベクトル
  const double  epsilon      // 精度
  );
 
ulong matrix::Compare(
  const matrix& mat,         // 比較する行列
  const double  epsilon      // 精度
  );

パラメータ

vector_b

[in] 比較するベクトル

epsilon

[in] 精度

戻り値

比較される行列/ベクトルの不一致要素の数(行列が等しい場合は0、そうでない場合は0より大きくなる)

注意事項

比較演算子「==」または「!=」は、正確な要素単位の比較を実行します。実数の正確な比較は用途が限られていることが知られているため、イプシロン比較法が追加されました。たとえば、1つの行列に1e-20から1e+20までの範囲の要素が含まれる場合があります。このような行列は、有効数字までの要素ごとの比較を使用して処理できます。

 

  matrix matrix_a={{10,3,2},{1,8,12},{6,5,4}};
  matrix matrix_i=matrix::Identity(3,3);
  matrix matrix_c=matrix_a.Inv();
  matrix matrix_check=matrix_a.MatMul(matrix_c);
  Print("matrix_check\n",matrix_check);
 
  ulong errors=matrix_check.Compare(matrix::Identity(3,3),1e-15);
  Print("errors=",errors);
 
 
 /*
matrix_check
 [[1,0,0]
 [4.440892098500626e-16,1,8.881784197001252e-16]
 [4.440892098500626e-16,2.220446049250313e-16,0.9999999999999996]]
errors=0
 
 */