#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), то наличие бесконечностей, вероятно, является источником вашего несоответствия.