Инвертирование матричного алгоритма 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?

(Не уверен, актуально ли это, но мои матрицы строковые)


person user2037921    schedule 04.05.2013    source источник
comment
У вас плохое инвертирование матрицы, и вам должно быть плохо.   -  person Grzegorz Piwowarek    schedule 04.05.2013
comment
Предлагаемое вами «решение» - полная чушь ...   -  person Andreas Rejbrand    schedule 04.05.2013


Ответы (1)


Ваша попытка записать инверсию матрицы 4x4 совершенно неверна. Нет абсолютно никакого смысла пытаться это исправить, потому что это никогда не сработает.

Вы спрашиваете, каков результат 1/0. Ну то есть деление на ноль и результат не определен. Не существует действительного числа x, удовлетворяющего 1/0 == x. Если было тогда 1 == x*0 == 0, противоречие. На компьютере попытка выполнить деление на ноль иногда приводит к ошибке, а иногда приводит к возврату специального значения с плавающей запятой Inf. Последнее похоже на то, что происходит в вашей среде.

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

person David Heffernan    schedule 04.05.2013
comment
Думаю, тогда я постараюсь пройти долгий путь, спасибо, что посмотрели хотя бы. - person user2037921; 04.05.2013
comment
Разве тебе не лучше с double[,]? Или структура с членами m00, m01, ..., m10, m11 и т. Д. Вы можете легко использовать код отсюда: euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/ - person David Heffernan; 04.05.2013