Инвертирование 4x4 матрица - Числовое самое стабильное решение необходимо

8 ответов

Я думаю, что ответ на это зависит от точной формы матрицы. Стандартный метод разложения (LU, QR, Cholesky и т.д.) с поворотом (основа) довольно хорош на фиксированной точке, специально для маленького 4x4 матрица. См. книгу 'Числовые Рецепты' Нажатием и др. для описания этих методов.

Данная статья дает некоторые полезные алгоритмы, но находится позади paywall, к сожалению. Они рекомендуют (вертевшееся) разложение Cholesky с некоторыми дополнительными функциями, также сложными для списка здесь.

6
ответ дан 1 December 2019 в 20:31
поделиться

Метаответ: это - действительно генерал 4x4 матрица? Если Ваша матрица имеет специальную форму, то существуют прямые формулы для инвертирования, которое было бы быстро и провело бы Ваш операционный подсчет вниз.

, Например, если это - стандартное однородное координатное преобразование от графики, как:

[ux vx wx tx]
[uy vy wy ty]
[uz vz wz tz]
[ 0  0  0  1]

(принятие состава вращения, масштаба, матриц перевода)

тогда существует легко получаемая прямая формула , которая является

[ux uy uz -dot(u,t)]
[vx vy vz -dot(v,t)]
[wx wy wz -dot(w,t)]
[ 0  0  0     1    ]

(матрицы ASCII, украденные от связанной страницы.)

Вы, вероятно, не можете победить это за потерю точности в фиксированной точке.

, Если Ваша матрица прибывает из некоторого домена, где Вы знаете, это имеет больше структуры, тогда, вероятно, будет легкий ответ.

17
ответ дан 1 December 2019 в 20:31
поделиться

Я хотел бы к второму вопрос Jason S повышенный: действительно ли Вы уверены, что необходимо инвертировать матрицу? Это почти никогда не необходимо. Не только, что, это часто - плохая идея. Если необходимо решить Топор = b, это более численно стабильно для решения системы непосредственно, чем умножить b на инверсию.

Даже если необходимо решить Топор = b много раз для многих значений b, это все еще не хорошая идея инвертировать A. Можно учесть (скажите, что LU-факторизация или факторизация Холесского), и сохраняют факторы, таким образом, Вы не восстанавливаете ту работу каждый раз, но Вы все еще решили бы систему каждый раз с помощью факторизации.

5
ответ дан 1 December 2019 в 20:31
поделиться

Позвольте мне задать другой вопрос: необходимо ли определенно инвертировать матрицу (назовите ее M), или необходимо ли использовать матричную инверсию для решения других уравнений? (например, Mx = b для известного M, b) Часто существуют другие способы сделать этот w/o, явно бывший должный вычислить инверсию. Или если матрица M является функцией времени, и она изменяется медленно затем, Вы могли бы вычислить полную инверсию однажды, и существуют повторяющиеся способы обновить ее.

2
ответ дан 1 December 2019 в 20:31
поделиться

Для уменьшения ошибок усечения и другой вредности используйте "поворот" - см. главу по инвертированию матриц в Числовых Рецептах. У них есть лучшее объяснение, которое я нашел до сих пор.

1
ответ дан 1 December 2019 в 20:31
поделиться

Вы могли бы рассмотреть удвоение до 1,31 прежде, чем сделать Ваш нормальный алгоритм. Это удвоит количество умножения, но Вы делаете матричное инвертирование и что-либо, что Вы делаете будет довольно связанным со множителем в Вашем процессоре.

Для любого заинтересованного нахождением уравнений для 4x4 инвертирование, можно использовать символьный математический пакет для разрешения их для Вас. TI-89 сделает это даже, хотя потребуется несколько минут.

, Если Вы даете нам общее представление о том, что матричное инвертирование делает для Вас, и как оно согласуется с остальной частью Вашей обработки, мы могли бы быть в состоянии предложить альтернативы.

-Adam

1
ответ дан 1 December 2019 в 20:31
поделиться

Простое Исключение Гаусса работало бы хорошо.

Это зависит, на каких библиотеках/классах/структурах Вы используете. Вы могли смотреть на GSL.

0
ответ дан 1 December 2019 в 20:31
поделиться

Если матрица представляет аффинное преобразование (много раз дело обстоит так с 4x4 матрицы, пока Вы не представляете масштабирующийся компонент), инверсия является просто транспонированием верхнего 3x3, вращение расстается с последним отрицаемым столбцом. Очевидно, если Вы требуете, чтобы обобщенное решение, тогда изучающее Исключение Гаусса, было, вероятно, самым легким.

-2
ответ дан 1 December 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: