Compare

두 행렬/벡터의 요소를 지정된 정밀도로 비교합니다.

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보다 큽니다.

복소수 행렬/벡터의 경우 comparison은 복소수 간의 거리 추정이 포함됩니다. 거리는 sqrt(pow(r1-r2, 2) + pow(i1-i2, 2)로 계산되며 이미 엡실론과 비교할 수 있는 실수입니다.

참조

비교 연산자 == or !=는 정확한 요소별 비교를 실행합니다. 실수의 정확한 비교는 제한적으로 사용되는 것으로 알려져 있으므로 엡실론 비교 방법이 추가되었습니다. 하나의 행렬이 예를 들어 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
 
  */