Compare

Compara los elementos de dos matrices/vectores con una precisión determinada.

ulong vector::Compare(
  const vector& vec,          // vector para la comparación
  const double  epsilon       // precisión
   );
 
ulong matrix::Compare(
  const matrix& mat,          // matriz para la comparación
  const double  epsilon       // precisión
   );

Parámetros

vector_b

[in]  Vector para la comparación.

vector_b

[in]  Vector para la comparación.

epsilon

[in]  Precisión.

Valor retornado

Retorna el número de elementos no coincidentes en las matrices o vectores comparados, es decir, tendremos 0 si las matrices son iguales, o un número mayor que 0 en caso contrario.

Para las matrices/vectores complejos, la comparación consiste en estimar la distancia entre números complejos. La distancia se calcula de acuerdo con la fórmula siguiente sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) y supone un número real que ya se puede comparar con épsilon.

Observación

Las operaciones de comparación == o != realizan una comparación por elementos exacta. Como sabemos, la comparación exacta de números reales tiene un uso limitado, por lo que hemos añadido el método de comparación con épsilon. Hay casos en los que dentro de una misma matriz hay elementos en el rango, por ejemplo, de 1e-20 hasta 1e+20. Para ello, se contempla la comparación por elementos, teniendo en cuenta los dígitos significativos.

 

Ejemplo:

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