Используя CUBLAS, я выполнил матричную инверсию матрицы N x N, содержащей случайные значения с плавающей запятой (одинарной точности) до 6 знаков после запятой. После получения обратной матрицы (и проверки с помощью этого веб-сайта) я умножил полученную обратную матрицу и исходная матрица (с использованием программы умножения матриц CUDA) в надежде получить точную матрицу идентичности. Но в матрице идентичности была ошибка. Не могли бы вы объяснить мне, почему это произошло? Я даже прилагаю вывод моей программы ниже.
Ошибка при получении матрицы идентичности после выполнения матричного умножения между матрицей и ее обратной
Ответы (1)
То, что вы видите, является числовой ошибкой. Это распространено из-за конечной точности вычислений. Вы можете начать отсюда.
https://en.m.wikipedia.org/wiki/Numerical_error
person
kangshiyin
schedule
13.06.2016
Нет, и на самом деле иногда невозможно точно представить число с типом float/double на компьютере. Например, "0,1"
- person kangshiyin; 13.06.2016
Ничего, если я отправлю программу вместе с возможными ошибками (такими как эта) в свое руководство? Поскольку метод проверки (матрица идентичности) не является точным на 100%.
- person pradyot; 13.06.2016
Отлично. Стандартный способ проверки результата числа с плавающей запятой — «приблизительно равен» с предопределенной допустимой ошибкой, такой как 1e-4.
- person kangshiyin; 13.06.2016