Compare

Сравнивает элементы двух матриц/векторов с указанной точностью.

ulong vector::Compare(
  const vector& vec,          // вектор для сравнения
  const double  epsilon       // точность
   );
 
ulong matrix::Compare(
  const matrix& mat,          // матрица для сравнения
  const double  epsilon       // точность
   );

Параметры

vec

[in]  Вектор для сравнения.

mat

[in]  Матрица для сравнения.

epsilon

[in]  Точность.

Возвращаемое значение

Возвращает количество несовпавших элементов у сравниваемых матриц или векторов, то есть 0, если матрицы равны, больше 0, в противном случае.

Примечание

Операции сравнения == или != производят точное поэлементное сравнение. Как известно, точное сравнение вещественных чисел имеет ограниченное применение, поэтому был добавлен метод сравнения с эпсилоном. Бывают случаи, когда в пределах одной матрицы существуют элементы в диапазоне, например, от 1e-20 до 1e+20. Для этого предусмотрено поэлементное сравнение с учётом значащих цифр.

Для комплексных матриц/векторов сравнение заключается в оценке расстояния между комплексными числами. Расстояние рассчитывается по следующей формуле sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) и является действительным числом, которое уже можно сравнивать с эпсилоном.

 

Пример:

   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
 
  */