Разные результаты с использованием == и поиска в MATLAB

#matlab

#matlab

Вопрос:

Я создал разреженную матрицу с помощью MEX, а также создал разреженную матрицу с помощью MATLAB. Для заполнения значений матрицы я использовал ту же формулу. Теперь, чтобы проверить, равны ли обе матрицы, я использовал result =(A ==B). результат возвращает 1 для всех индексов, что подразумевает, что все элементы матрицы равны. Но если я действительно нахожу (A-B), он возвращает некоторые индексы, что указывает на то, что при этих индексах значения ненулевые. Как это возможно?

Примечание: Когда я сравниваю значение по этим индексам, оно показывает равное!

Комментарии:

1. Каков результат A-B? Если это действительно маленькое неравенство, может быть результатом ограниченной числовой точности.

2. Покажите пример пары значений, где они равны, но A-B не равно нулю.

Ответ №1:

Я предполагаю, что у вас есть значения бесконечности, возникающие в ваших матрицах в одних и тех же точках. Например:

 >> A = Inf;
>> B = Inf;
>> A == B

ans =

     1  %# They are treated as equal...

>> A-B

ans =

   NaN  %# ...but their difference actually results in NaN...

>> find(A-B)

ans =

     1  %# ...which is treated as a non-zero value.
  

Несоответствие здесь является результатом того факта, что определенные операции, включающие бесконечность, приводят к NaN значениям. Вы можете проверить, есть ли у вас какие-либо бесконечности в A и B , используя функцию ISINF следующим образом:

 any(isinf(A(:)))
any(isinf(B(:)))
  

И если вы получаете значение 1 (т. Е. true), то наличие бесконечностей, вероятно, является источником вашего несоответствия.