Compare

Vergleich der Elemente von zwei Matrizen oder Vektoren mit der angegebenen Präzision.

ulong vector::Compare(
  const vector& vec,         // zu vergleichender Vektor
  const double  epsilon       // Präzision
   );
 
ulong matrix::Compare(
  const matrix& mat,          // zu vergleichende Matrix
  const double  epsilon       // Präzision
   );

Parameter

vector_b

[in]  zu vergleichende Matrix.

epsilon

[in]  Präzision.

Rückgabewert

Die Anzahl der nicht übereinstimmenden Elemente der zu vergleichenden Matrizen oder Vektoren: 0, wenn die Matrizen gleich sind, sonst größer als 0.

Hinweis

Die Vergleichsoperatoren == oder != führen einen exakten, elementweisen Vergleich durch. Es ist bekannt, dass der exakte Vergleich von reellen Zahlen nur von begrenztem Nutzen ist, daher wurde die Epsilon-Vergleichsmethode hinzugefügt. Es kann vorkommen, dass eine Matrix Elemente in einem Bereich enthalten kann, z. B. von 1e-20 to 1e+20. Solche Matrizen können mit dem elementweisen Vergleich bis zu signifikanten Zahlen verarbeitet werden.

Bei komplexen Matrizen/Vektoren beinhaltet der Vergleich die Schätzung des Abstands zwischen komplexen Zahlen. Der Abstand wird berechnet durch sqrt(pow(r1-r2, 2) + pow(i1-i2, 2) und ist eine reelle Zahl, die direkt mit epsilon verglichen werden kann.

 

Beispiel

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