Compare

Compara os elementos de duas matrizes/vetores com a precisão especificada.

ulong vector::Compare(
  const vector& vec,          // vetor de comparação
  const double  epsilon       // precisão
   );
 
ulong matrix::Compare(
  const matrix& mat,          // matriz de comparação
  const double  epsilon       // precisão
   );

Parâmetros

vector_b

[in]  Vetor de comparação.

vector_b

[in]  Vetor de comparação.

epsilon

[in]  Precisão.

Valor retornado

Retorna o número de elementos diferentes entre as matrizes ou vetores comparados, ou seja, 0 se as matrizes forem iguais, caso contrário, o valor será maior que 0.

Para matrizes/vetores complexos, a comparação é para estimar a distância entre números complexos. A distância é calculada usando a fórmula sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) e é um número real que já pode ser comparado a epsilon.

Observação

Os operadores de comparação == ou != produzem uma comparação exata elemento por elemento. É conhecido que a comparação exata de números reais tem sua aplicação limitada, por isso foi adicionado o método de comparação com epsilon. Existem casos em que dentro da mesma matriz existem elementos no intervalo, por exemplo, de 1e-20 a 1e+20. Para isso, é fornecida uma comparação elemento a elemento, levando em consideração dígitos significativos.

 

Exemplo:

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