파이썬 용 윌슨의 스펙트럼 밀도 인수 분해 알고리즘 [1]을 구현하려고합니다. 알고리즘은 [QxQ] 행렬 함수를 그것의 제곱근으로 반복적으로 인수 분해합니다 (이는 스펙트럼 밀도 행렬에 대한 Newton-Raphson 제곱근 파인더의 확장입니다).수치 안정성 문제를 디버깅하기위한 전략은 무엇입니까?
문제는 내 구현이 크기가 45x45 이하인 행렬에만 수렴한다는 것입니다. 따라서 20 회 반복 한 결과 행렬의 제곱 된 차이는 약 2.45e-13입니다. 그러나 크기를 46x46으로 입력하면 100 번 정도까지 수렴하지 않습니다. 47x47 이상에서는 행렬이 수렴하지 않습니다. 오류는 약 100 반복에 대해 100과 1000 사이에서 변동하고 매우 빠르게 증가하기 시작합니다.
어떻게 이런 식으로 디버깅하려고합니까? 그것이 미쳐가는 특정 시점이없는 것처럼 보이며 행렬이 실제로 계산을 시도하기에 너무 큽니다. 누구나 이런 기괴한 수치 버그를 찾기위한 팁/자습서/발견 적 방법이 있습니까? 댄
[1] G. T. 윌슨 -
...
감사합니다, 을 내가 전에 이런 일 처리 적이하지만 난 당신의 일부가 바라고 있어요. "Matricial 스펙트럼 밀도의 인수 분해 (Factorization of Matricial Spectral Density)". SIAM J. Appl. Math (Vol 23, No. 4, 1972 년 12 월)
"45x45 크기의 행렬 만 수렴한다는 의미는 무엇입니까?" 45x45보다 작은 행렬도 실패합니까? – badp
아니요, 죄송합니다. 게시물을 수정할 것입니다. 크기 45x45 이하로 성공적으로 수렴합니다. – Dan