Инвертирование матричного алгоритма 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 возвращается Последнее, кажется, то, что происходит в вашей среде.

Я не знаю, почему вы отклонили детерминантный код. Возможно, вы нашли это сложно реализовать. Но так оно и есть. Вы не собираетесь сокращать эту сложность.

Другие вопросы по тегам