Compare

Compare les éléments de deux matrices/vecteurs avec la précision spécifiée.

ulong vector::Compare(
  const vector& vec,         // vecteur de comparaison
  const double  epsilon       // précision
   );
 
ulong matrix::Compare(
  const matrix& mat,          // matrice de comparaison
  const double  epsilon       // précision
   );

Paramètres

vector_b

[in]  Vecteur de comparaison.

epsilon

[in]  Précision.

Valeur de Retour

Le nombre d'éléments non concordants des matrices ou des vecteurs comparés : 0 si les matrices sont égales, supérieur à 0 sinon.

Note

Les opérateurs de comparaison == ou != exécutent une comparaison exacte élément par élément. On sait que la comparaison exacte des nombres réels est d'une utilité limitée, c'est pourquoi la méthode de comparaison epsilon a été ajoutée. Il peut arriver qu'une matrice contienne des éléments dans une plage, par exemple de 1e-20 à 1e+20. De telles matrices peuvent être traitées en utilisant une comparaison élément par élément jusqu'à des chiffres significatifs.

Pour les matrices/vecteurs complexes, la comparaison consiste à estimer la distance entre les nombres complexes. La distance est calculée comme sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) et est un nombre réel qui peut déjà être comparé à epsilon.

 

Exemple

   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("erreurs=",errors);
 
 
  /*
  matrix_check
  [[1,0,0]
  [4.440892098500626e-16,1,8.881784197001252e-16]
  [4.440892098500626e-16,2.220446049250313e-16,0.9999999999999996]]
  erreurs=0
 
  */