fix: use residual stopping for FEAST eigenanalysis

This commit is contained in:
KOKO\Mimi
2026-09-10 01:52:49 +09:00
parent 76192508fd
commit 7ebdce373c
12 changed files with 209 additions and 17 deletions
@@ -1,8 +1,10 @@
# 내부 수치 기준과 FEAST controls
- Feature ID: `mitc4-shell-feast-eigen2`; Owner: `numerical-review-agent`; revision `r1`.
- Feature ID: `mitc4-shell-feast-eigen2`; Owner: `numerical-review-agent`; revision `r2` (2026-09-10, C5 종료 제어만 변경).
- 기본 보고서: [numerical-review](numerical-review.md); 수식: [새 formulation](formulation.md).
- IEEE binary64의 내부 검증 계약이며 [외부 TOLERANCE](../TOLERANCE.md)를 변경하지 않는다.
- 아래 `NOT RUN`은 r1 문서 검토 당시의 기록이다. 변경된 C5의 실제 실행 판정은
[종료 제어 구현 검토](implementation-feast-residual-review.md)를 따른다.
## C1–C4, C6, C7의 독립 검토 후 명시 채택
@@ -46,15 +48,25 @@ Seed 변경으로 통과를 찾지 않는다. oneMKL thread-local 1을 설정하
| Index | 값 |
| --- | --- |
| `[0],[1],[2],[3]` | `0,16,12,20` |
| `[4],[5],[13]` | `1,1,0` |
| `[4],[5],[13]` | `1,0,0` |
| `[26],[27]` | `1,1` |
| `[49]` | Count `1`, solve `0` |
| `[63]` | `0` |
나머지는 해당 설치의 초기값을 유지·기록한다. 이번 [Intel parameter table](https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2026-0/extended-eigensolver-input-parameters.html)의 허용 contour16,
trace stopping, CSR/SPD checks와 count flag reset을 확인했다. 위 값은 FESA의 고정
residual stopping, CSR/SPD checks와 count flag reset을 확인했다. 위 값은 FESA의 고정
제어 선택이며 어떤 matrix에서도 수렴한다는 vendor 보장이 아니다.
2026-09-10 사용자 승인으로 C-index `fpm[5]=1` trace stopping을 `0` residual stopping으로
대체한다. Double precision의 vendor stopping epsilon은 `10^-fpm[2]=1e-12`이며
`fpm[3]=20`을 유지한다. Count/solve 모두 같은 초기 controls를 적용하고 `[49]`만 구분한다.
전체 c개의 독립 `rho_B=||Bx-mu x||2/||x||2<=1e-10`, Gram 및 original-free 복구 검증은
그대로다. Vendor residual의 정규화와 독립 rho_B를 동일시하지 않으며 `info=0`도 독립 검증을
대체하지 않는다. `epsout`은 trace 변화 진단량으로 보존하고 새 residual 오차로 재해석하지 않는다.
기존 trace 실행의 pass/fail·loop·epsout은 당시 controls의 이력이다. Zero/mixed-zero/repeated
및 원본 모델의 새 실행과 미해결 위험은 [종료 제어 구현 검토](implementation-feast-residual-review.md)에
구분한다. S3·물리 정식화·공통 외부 tolerance는 이 결정으로 변경하지 않는다.
Gershgorin off-diagonal absolute row sum은 매 합산 뒤 `nextafter(+infinity)`로 outward
누적하고 diagonal±sum도 바깥 한 ULP를 적용한다. `beta=norm(B,inf)`도 outward로 구한다.
`B=0`의 algorithmic enclosure에서만 beta=1이며 physical mass/λ floor가 아니다.