CompareEqual

Executa uma comparação absoluta de duas matrizes, transformando suas linhas sequenciais em vetores unidimensionais.

ulong vector::Compare(
  const vector& vec    // vetor para comparação
   );
 
ulong matrix::CompareEqual(
  const matrix& mat     // matriz para comparação
   );

Parâmetros

vec

[in]  Vetor para comparação.

mat

[in]  Matriz para comparação.

Descrição do método

Suponha que temos duas matrizes: a matriz A – matriz que chama o método – e a matriz B, passada como parâmetro. A comparação segue os seguintes passos:

  1. As matrizes são transformadas em vetores unidimensionais, concatenando suas linhas sequencialmente.
  2. Os vetores resultantes são comparados elemento por elemento, até o primeiro elemento divergente.
  3. O método retorna um dos valores descritos abaixo, conforme o resultado da comparação.

Valor retornado

-1 – se um elemento da matriz A for menor que o elemento correspondente na matriz B.

0 – se todos os elementos das matrizes A e B forem idênticos.

1 – se um elemento da matriz A for maior que o elemento correspondente na matriz B.

Observação

Ao comparar, os elementos com valor NaN são levados em consideração.

Elementos NaN são tratados como iguais se estiverem na mesma posição em ambas as matrizes.

O sinal de NaN não é considerado na comparação.

Um elemento NaN é considerado menor que qualquer outro 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
   */
 
//--- comparação absoluta de matrizes
   matrix<doubleA = matrix_a;  // Inicialização da matriz A
   matrix<doubleB = matrix_c;  // Inicialização da matriz B
   int result = A.CompareEqual(B);
   switch(result)
     {
      case -1:
         Print("A matriz A é menor que a matriz B");
         break;
      case 0:
         Print("As matrizes A e B são idênticas");
         break;
      case 1:
         Print("A matriz A é maior que a matriz B");
         break;
      case -2:
         Print("Error! A matriz A não foi inicializada");
         break;
      case 2:
         Print("Error! Matriz B não inicializada");
         break;
      case -3:
         Print("Error! O tamanho da matriz A é menor que o tamanho da matriz B");
         break;
      case 3:
         Print("Error! O tamanho da matriz A é maior do que o tamanho da matriz B");
         break;
      default:
         Print("Error! Erro desconhecido");
         break;
     }
  }