Compare

按指定的精度比较两个矩阵/向量的元素。

ulong vector::Compare(
  const vector& vec,         // 欲比较的向量
  const double  epsilon       // 精度
   );
 
ulong matrix::Compare(
  const matrix& mat,          // 欲比较的矩阵
  const double  epsilon       // 精度
   );

参数

vector_b

[输入]  欲比较的向量。

epsilon

[输入]  精度。

返回值

所比较的矩阵或向量的不匹配元素数量:如果矩阵相等,则为 0,否则大于 0。

注意

比较运算符 == 或 != 执行精确的元素级比较。 众所周知,实数的精确比较用途有限,因此增加了 epsilon 比较方法。 一个矩阵也许包含某个范围内的元素,例如从 1e-20 到 1e+20。 这些矩阵可逐元素比较来进行处理,直到有效数字。

对于复数矩阵/向量,该比较包括估计复数之间的距离。距离的计算公式为sqrt(pow(r1-r2, 2) + pow(i1-i2, 2),并且是一个可以与epsilon进行比较的实数。

 

举例

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