Матрица ввода выглядит следующим образом:
[ 1 2 4 ]
[ 4 5 6 ]
[ 7 8 9 ]
(MAT1)
Wolfram Alpha подтверждает, что имеет обратное. С помощью matrix.i()
(что означает, что он использует быстрый инверт) дает примерно правильный результат
[ 1.0000 -4.6667 2.6667 ]
[ -1.0000 6.3333 -3.3333 ]
[ 1.0000 -2.0000 1.0000 ]
(MAT2)
Но включив медленный режим, написав matrix.i(true)
заставляет его бросить logic_error
, Любая причина, которая сделала бы это?
Причина, по которой я попытался включить его, состоит в том, что умножение инвертированной матрицы на вектор
[ 15 ]
[ 24 ]
[ 35 ]
(Mat3)
дает неправильный ответ
[ -3.6667 ]
[ 20.3333 ]
[ 2.0000 ]
(Mat4)
когда это должно быть это, или же
[ -3.6667 ]
[ 5.3333 ]
[ 2.0000 ]
(Mat5)
Проверка непосредственно перед умножением подтвердила, что вход (Mat3) было правильно, что привело меня к мысли, что быстрое обращение создало неправильную матрицу в качестве вывода (mat4 вместо mat5).
… Теперь, когда я думаю об этом, быстрое обратное является правильным, и нет никаких причин для того, чтобы оно не было правильным … Это затруднение.
Главный вопрос, как написано выше,
Какой-либо причине matrix.i(true)
вызывает логическую ошибку, в то время как matrix.i()
не делает?
Задача ещё не решена.
Других решений пока нет …