CompareEqual

Выполняет абсолютное сравнение двух матриц путем разворачивания последовательных строк в одномерные векторы.

ulong vector::Compare(
  const vector& vec    // вектор для сравнения
   );
 
ulong matrix::CompareEqual(
  const matrix& mat     // матрица для сравнения
   );

Параметры

vec

[in]  Вектор для сравнения.

mat

[in]  Матрица для сравнения.

Описание работы метода

Пусть у нас есть две матрицы: матрица A — матрица, для которой вызывается метод, и матрица B, которая передается в параметре метода. Сравнение выполняется следующим образом:

  1. Матрицы разворачиваются в одномерные векторы путем последовательного объединения строк.
  2. Векторы сравниваются поэлементно до первого несовпадающего элемента.
  3. В зависимости от результатов сравнения возвращается одно из значений, описанных ниже.

Возвращаемое значение

-1 — если элемент матрицы A меньше соответствующего элемента матрицы B.

0 — если все элементы матриц A и B идентичны.

1 — если элемент матрицы A больше соответствующего элемента матрицы B.

Примечание

При сравнении учитываются элементы со значением NaN.

Элементы со значением NaN считаются равными, если они присутствуют в обеих матрицах на соответствующих позициях.

Знак NaN не учитывается при сравнении.

Элемент со значением NaN считается меньше любого другого числового значения.

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
   */
 
//---  абсолютное сравнение матриц 
   matrix<doubleA = matrix_a;  // Инициализация матрицы A
   matrix<doubleB = matrix_c;  // Инициализация матрицы B
   int result = A.CompareEqual(B);
   switch(result)
     {
      case -1:
         Print("Матрица A меньше матрицы B");
         break;
      case 0:
         Print("Матрицы A и B идентичны");
         break;
      case 1:
         Print("Матрица A больше матрицы B");
         break;
      case -2:
         Print("Error! Матрица A неинициализирована");
         break;
      case 2:
         Print("Error! Матрица B неинициализирована");
         break;
      case -3:
         Print("Error! Размер матрицы A меньше размера матрицы B");
         break;
      case 3:
         Print("Error! Размер матрицы A больше размера матрицы B");
         break;
      default:
         Print("Error! Неизвестная ошибка");
         break;
     }
  }