문제

4x4 매트릭스를 뒤집고 싶습니다. 내 숫자는 고정 점 형식으로 저장됩니다 (정확히 1.15.16).

플로팅 포인트 산술을 사용하면 일반적으로 인접한 매트릭스를 만들고 결정 요인 (예 : 용액 강제)으로 나눕니다. 그것은 지금까지 저에게 효과가 있었지만 고정점 번호를 다룰 때 사용 된 모든 곱셈으로 인해 용납 할 수없는 정밀 손실이 발생합니다.

참고 : 고정 지점 산술에서 나는 항상 가장 중요한 결과의 가장 중요한 비트를 버립니다.

그렇다면 - 매트릭스를 반전시키는 가장 수치적인 안정적인 방법은 무엇입니까? 나는 성능에 대해별로 신경 쓰지 않지만 단순히 부동 소수점에가는 것은 내 대상 아키텍처를 늦추는 것입니다.

도움이 되었습니까?

해결책

나는 이것에 대한 대답이 정확한 형태의 행렬에 달려 있다고 생각합니다. 피봇 팅 (필수)이있는 표준 분해 방법 (LU, QR, Cholesky 등)은 특히 작은 4x4 매트릭스의 경우 고정점에서 상당히 좋습니다. Press et al.의 '수치 레시피'책을 참조하십시오. 이 방법에 대한 설명을 위해.

이 종이 유용한 알고리즘을 제공하지만 불행히도 페이 월 뒤에 있습니다. 그들은 여기에 나열하기에는 너무 복잡한 몇 가지 추가 기능을 갖춘 (피벗) Cholesky 분해를 권장합니다.

다른 팁

Meta-Answer : 실제로 일반 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 매트릭스.)

고정 지점에서 정밀도 손실로 인해 이길 수는 없습니다.

매트릭스가 더 많은 구조를 가지고 있다는 것을 알고있는 일부 도메인에서 나오면 쉬운 답변이있을 수 있습니다.

제이슨이 제기 한 질문을 두 번째로하고 싶습니다. 매트릭스를 뒤집어야한다고 확신하십니까? 이것은 거의 필요하지 않습니다. 뿐만 아니라 종종 나쁜 생각입니다. AX = B를 해결 해야하는 경우 B에 역으로 B를 곱하는 것보다 시스템을 직접 해결하는 것이 더 안정적입니다.

B의 많은 값에 대해 AX = B를 반복해서 해결해야하더라도 여전히 A를 뒤집는 것은 좋은 생각이 아닙니다. 요인 A (LU 인수화 또는 Cholesky 인수화) 및 요인을 저장하여 매번 작동하지 않지만 인수화를 사용하여 매번 시스템을 해결할 수 있습니다.

다른 질문을하겠습니다. 매트릭스를 반전시켜야합니까 (M 호출), 아니면 다른 방정식을 해결하기 위해 행렬 역을 사용해야합니까? (예 : 알려진 m, b에 대한 mx = b) 종종 역을 계산하기 위해 명시 적 으로이 작업을 수행 할 수있는 다른 방법이 있습니다. 또는 행렬 M이 시간의 함수이고 천천히 변하는 경우 전체 역을 한 번 계산할 수 있으며이를 업데이트하는 반복적 인 방법이 있습니다.

잘림 오류 및 기타 악을 최소화하려면 "피봇 팅"을 사용하려면 숫자 레시피의 행렬을 반전시키는 장을 참조하십시오. 그들은 내가 지금까지 찾은 최고의 설명을 가지고 있습니다.

일반 알고리즘을 수행하기 전에 1.31로 두 배가되는 것을 고려할 수 있습니다. 곱셈의 수가 두 배로 늘어나지 만 매트릭스 반전을 수행하고 있으며 귀하가하는 모든 일은 프로세서의 승수에 꽤 묶여 있습니다.

4x4 반전 방정식을 찾는 데 관심이있는 사람이라면 상징적 수학 패키지를 사용하여 해결할 수 있습니다. TI-89는 몇 분이 걸리지 만 그렇게 할 것입니다.

매트릭스가 당신을 위해 무엇을하는지에 대한 아이디어와 그것이 당신의 나머지 처리에 어떻게 적합한 지에 대한 아이디어를 제공한다면 우리는 대안을 제안 할 수 있습니다.

-아담

평범한 오래된 가우스 제거는 잘 작동합니다.

사용중인 라이브러리/클래스/구조에 따라 다릅니다. 당신은 그것을 볼 수 있습니다 GSL.

매트릭스가 아핀 변환을 나타내는 경우 (스케일링 구성 요소를 소개하지 않는 한, 4x4 행렬의 경우가 여러 번 발생합니다) 역은 단순히 마지막 열이 부정 된 상단 3x3 회전 부분의 조기입니다. 분명히 일반화 된 솔루션이 필요하다면 가우시안 제거를 조사하는 것이 가장 쉬운 일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top