Инвертирование матричного алгоритма 4x4
Я пытаюсь инвертировать матрицы 4x4, я видел несколько примеров вычисления определителя с помощью нескольких десятков вычислений, мне это не помогло, возможно, я где-то все испортил, но я пытался чтобы найти другой способ решить эту проблему, я ответил так:
public Matrix inverse()
{
double[] array = new double[]{
1/m[0], m[4], m[8], 0,
m[1], 1/m[5], m[9], 0,
m[2], m[6], 1/m[10], 0,
-m[12], -m[13], -m[14], 1/m[15]
};
return new Matrix(array);
}
По сути, я делаю, вычисляя инвертирование всех его компонентов, это работает довольно хорошо, ожидайте, что число 15, последнее число, по какой-то причине выбрасывает бесконечность, кто-нибудь знает, почему? Моим единственным предположением будет деление на ноль, но тогда вопрос, что такое обратное к 0? Ответ 0?
(Не уверен, что это уместно, но мои матрицы являются основными)
1 ответ
Ваша попытка записать обратную матрицу 4x4 совершенно неверна. Нет абсолютно никакого смысла пытаться это исправить, так как это никогда не может работать.
Вы спрашиваете, каков результат 1/0
является. Ну, это деление на ноль, а результат не определен. Там нет реального числа x
это удовлетворяет 1/0 == x
, Если бы было 1 == x*0 == 0
противоречие. На компьютере попытка выполнить деление на ноль иногда приводит к ошибке, а иногда приводит к специальному значению с плавающей запятой Inf
возвращается Последнее, кажется, то, что происходит в вашей среде.
Я не знаю, почему вы отклонили детерминантный код. Возможно, вы нашли это сложно реализовать. Но так оно и есть. Вы не собираетесь сокращать эту сложность.