Следующий скрипт должен распечатать матрицу 7x7 all-ones, потому что уравнение выполнено.Matlab матрица-умножение и точность транспонирования
A = rand(5,7);
B = rand(5,7);
C = (A' * B)';
D = B' * A;
C == D
Вместо этого вида ответа:
ans =
1 1 1 1 0 1 1
1 1 1 1 0 1 0
1 1 1 1 1 1 1
1 1 1 1 0 0 0
1 0 1 1 1 1 1
0 0 1 1 1 1 1
0 1 1 0 1 1 1
Я думаю, что это проблема точности с плавающей точкой, потому что с format long
номера отличаются C и D.
- Что я делаю неправильно?
- Куда он пойдет не так?
- Как этого избежать?
* Я думаю, что это проблема точности с плавающей точкой [...] *. Да. Поскольку 'rand' возвращает числа с плавающей запятой, вы не должны ожидать, что матрицы' C' и 'D' будут в точности равны. Предпочитайте что-то вроде 'norm (C-D) <= epsilon', где' epsilon' - небольшое положительное число. – Jubobs