CompareEqual

Ejecuta una comparación absoluta de dos matrices, transformando sus filas secuenciales en vectores unidimensionales.

ulong vector::Compare(
  const vector& vec    // vector para comparación
   );
 
ulong matrix::CompareEqual(
  const matrix& mat     // matriz para comparación
   );

Parámetros

vec

[in]  Vetor para comparación.

mat

[in]  Matriz para comparación.

Descripción del método

Supongamos que tenemos dos matrices: la matriz A – matriz que llama al método – y la matriz B, pasada como parámetro. La comparación sigue los siguientes pasos:

  1. Las matrices se transforman en vectores unidimensionales, concatenando sus filas secuencialmente.
  2. Los vectores resultantes se comparan elemento por elemento, hasta el primer elemento divergente.
  3. El método devuelve uno de los valores descritos a continuación, dependiendo del resultado de la comparación.

Valor devuelto

-1 – si un elemento de la matriz A es menor que el elemento correspondiente en la matriz B.

0 – si todos los elementos de las matrices A y B son idénticos.

1 – si un elemento de la matriz A es mayor que el elemento correspondiente en la matriz B.

Observación

Al comparar, se tienen en cuenta los elementos con valor NaN.

Los elementos NaN se tratan como iguales si están en la misma posición en ambas matrices.

El signo de NaN no se considera en la comparación.

Un elemento NaN se considera menor que cualquier otro valor numérico.

Example

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   matrix matrix_a= {{1032}, {1812}, {654}};
   matrix matrix_i=matrix::Identity(33);
   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(33), 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
   */
 
//--- comparación absoluta de matrizes
   matrix<doubleA = matrix_a;  // Inicialización de la matriz A
   matrix<doubleB = matrix_c;  // Inicialización de la matriz B
   int result = A.CompareEqual(B);
   switch(result)
     {
      case -1:
         Print("La matriz A es menor que la matriz B.");
         break;
      case 0:
         Print("Las matrices A y B son idénticas.");
         break;
      case 1:
         Print("La matriz A es mayor que la matriz B.");
         break;
      case -2:
         Print("Error! La matriz A no fue inicializada.");
         break;
      case 2:
         Print("Error! La matriz B no fue inicializada.");
         break;
      case -3:
         Print("Error! El tamaño de la matriz A es menor que el tamaño de la matriz B");
         break;
      case 3:
         Print("Error! El tamaño de la matriz A es mayor que el tamaño de la matriz B");
         break;
      default:
         Print("Error! Error desconocido");
         break;
     }
  }