2014-11-01 2 views
3

I 아르마딜로 C로 프로그램을 쓰고 ++ (4.400.1)딜 착체 희소 역행렬

I가 성긴 복합 수있는 매트릭스를 가지며, I는 행렬의 역행렬을 계산하고 싶다. 그것이 희박하기 때문에 그것은 pseudoinverse가 될 수 있습니다. 그러나 행렬이 완전한 대각선임을 보장 할 수 있습니다. 아르마딜로의 API 문서에서

는, 어떤 행렬의 역행렬을 계산하는 방법 .i()을 언급하지만, sp_cx_mat 회원은 방법을 포함하지 않으며, inv() 또는 pinv() 기능을 분명히 sp_cx_mat 유형을 처리 할 수 ​​없습니다. 그 중

sp_cx_mat Y; 

/*Fill Y ensuring that the diagonal is full*/ 

sp_cx_mat Z = Y.i(); 

또는

sp_cx_mat Z = inv(Y); 

없음이 작동하지 않습니다.

sp_cx_mat 유형의 행렬의 역함수를 계산하는 방법을 알고 싶습니다.

+0

크기는 무엇입니까? X * X 또는 X * Y? – Surt

+0

행렬이 정사각형이므로 X가 X로 –

+0

희소 행렬의 역함수가 반드시 희소하지는 않습니다. 스파 스 행렬의 역함을 정말로 필요로합니까? 빠른 검색 후에 내가 본 모든 문헌은 근본 문제를 다른 방식으로 해결할 것을 권장합니다. 나는. 반복 방법 (또는 다른 방법)을 사용하여 Ax = b를 푸십시오. – Unapiedra

답변

2

아르마딜로의 스파 스 매트릭스 지원은 완전하지 않으며 밀도 매트릭스에 사용할 수있는 많은 인수 분해/복잡한 연산은 스파 스 매트릭스에 사용할 수 없습니다. 여기에는 여러 가지 이유가 있습니다. 가장 큰 것은 스파 스 행렬에 대한 인수 분해와 같은 효율적인 복잡한 연산이 여전히 공개 된 연구 분야입니다. 따라서 cx_sp_mat 또는 sp_mat 유형에는 .i() 기능을 사용할 수 없습니다. 이것에 대한 또 다른 이유는 스파 스 매트릭스 개발자 (... 나)의 부분에 시간 부족입니다.

는 희소 행렬의 역은 일반적으로 밀도가 될 것입니다 감안할 때, 당신은 단순히 당신의 cx_sp_mat cx_mat으로 선회하고 조밀 한 행렬에 대한 평소 같은 반전 기술을 사용하여 더 나을 수 있습니다. 어쨌든 이것을 조밀 한 행렬로 표현하려고 계획하고 있으므로, 그렇게하기에 충분한 RAM이 있다는 것은 공정한 가정입니다.