Compare

Confronta gli elementi di due matrici/vettori con la precisione specificata.

ulong vector::Compare(
  const vector& vec,         // vettore da confrontare
  const double  epsilon       // precisione
   );
 
ulong matrix::Compare(
  const matrix& mat,          // matrice da confrontare
  const double  epsilon       // precisione
   );

Parametri

vector_b

[in] Vettore da confrontare.

epsilon

[in] Precisione.

Valore Restituito

Numero di elementi non corrispondenti delle matrici o dei vettori confrontati: 0 se le matrici sono uguali, maggiore di 0 altrimenti.

Note

Gli operatori di confronto == o != eseguono un confronto esatto. È noto che il confronto esatto dei numeri reali è di uso limitato, quindi è stato aggiunto il metodo di confronto epsilon. Può accadere che una matrice possa contenere elementi in un intervallo, ad esempio da 1e-20 a 1e+20. Tali matrici possono essere elaborate utilizzando il confronto degli elementi fino a cifre significative.

Per le matrici/vettori complessi, il confronto comprende stimare la distanza fra i numeri complessi. La distanza è calcolata come sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) ed è un numero reale che può già essere confrontato con epsilon.

 

Esempio

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