뉴턴의 방법이 왜 수렴하지 않습니까?


22

I가 사용하고 PETSc 의 비선형 솔버 패키지 SNES을 편미분 방정식을 이산화하여 얻은 비선형 방정식의 시스템을 해결하기 위해. 솔버가 수렴하지 않는 이유와 방정식을 성공적으로 풀기 위해 어떻게해야합니까?


8
반복적 인 방법과 마찬가지로, Newton-Raphson 방법을 시작하기에 좋은 씨앗을 만드는 것이 가장 중요합니다. 시작점이 좋지 않으면 종종 혼란이 생깁니다.
JM

6
"종종 혼란에 빠진다"고 생각합니다. Blum, Cucker, Shub 및 Smale을 참조하면 Newton에는 경계로 분리 된 매력적인 분지가있어 혼란스러운 반복이 발생할 수 있습니다. 따라서 이런 종류의 행동은 수렴과 비교할 가능성이 거의 없습니다. 알고리즘이 실제 솔루션 만 찾는 경우 자주 수렴하지 못하지만 혼돈되지는 않습니다.
Matt Knepley

5
나는 비 기술적 의미에서 "카오스"를 의미했다. @Matt; 예를 들어 무한대로의 발산 또는 주기적 행동. 어쩌면 "재해"가 더 나은 단어 선택 이었을까요?
JM

답변:


42

뉴턴의 방법은 여러 가지 이유로 수렴되지 않을 수 있습니다. 여기에 가장 일반적인 것이 있습니다.

  • 야곱이 잘못되었습니다 (또는 순차적이지만 정확하지는 않습니다).
  • 선형 시스템이 해결되지 않았거나 정확하게 해결되지 않았습니다.
  • Jacobian 시스템은 선형 솔버가 처리하지 않는 특이점을 가지고 있습니다.
  • 기능 평가 루틴에 버그가 있습니다.
  • 이 기능은 연속적이지 않거나 연속적인 1 차 미분 (예 : 위상 변화 또는 TVD 리미터)이 없습니다.
  • 방정식에는 해가 없거나 (예 : 정상 상태 대신 한계 사이클) 초기 추측과 정상 상태 사이에 "힐 (hill)"이있을 수 있습니다 (예 : 반응물은 정상 상태에 도달하기 전에 발화 및 연소되어야하지만 정상 연소 중에는 상태 잔류가 더 커집니다).

다음은 뉴턴의 수렴 부족을 디버깅하는 데 도움이되는 몇 가지 방법입니다.

  • 옵션으로 실행하십시오 -snes_monitor -ksp_monitor_true_residual -snes_converged_reason -ksp_converged_reason. 선형 해소가 수렴하지 않는 경우 Jacobian이 올바른지 확인한 후이 질문 을 참조하십시오 . 사전 조정 된 잔차가 수렴하지만 실제 잔차가 그렇지 않은 경우 사전 조정자는 단일 일 수 있습니다. 선형 해석이 잘 수렴하지만 회선 검색에 실패하면 Jacobian이 올바르지 않을 수 있습니다.
  • -pc_type lu or -pc_type svd문제가 불량 선형 솔버인지 확인하기 위해 실행
  • 으로 실행 -mat_view또는 -mat_view_draw코비안이 합리적 보이는 있는지 확인하려면
  • -snes_type test -snes_test_display당신이 사용하는 야 코비안이 잘못되었는지 확인하기 위해 함께 실행하십시오 . 추가 -mat_fd_type ds할 때 출력을 비교하여 결과가 차이 매개 변수 선택에 민감한 지 확인하십시오.
  • -snes_mf_operator -pc_type lu당신이 사용하는 야 코비안이 잘못되었는지 확인하기 위해 함께 실행하십시오 . 직접 해결하기에 문제가 너무 큰 경우을 시도하십시오 -snes_mf_operator -pc_type ksp -ksp_ksp_rtol 1e-12. 추가 -mat_mffd_type ds할 때 출력을 비교하여 결과가 차이 매개 변수 선택에 민감한 지 확인하십시오.
  • 하나의 프로세서에서 실행하여 문제가 병렬인지 확인하십시오.
  • -snes_ls_monitor라인 검색이 실패하는지 확인하기 위해 함께 실행하십시오 (이것은 일반적으로 나쁜 Jacobian의 표시입니다).
  • -info솔루션 프로세스에 대한 자세한 정보를 얻으려면 다음을 실행하십시오 .

위의 모든 것이 체크 아웃되면 Newton 프로세스를 돕는 몇 가지 방법이 있습니다.

  • 그리드 시퀀싱 (을 -snes_grid_sequence사용하는 경우 필요한 모든 것)으로 실행 하면 DM미세한 메시에서 더 나은 초기 추측이 생성됩니다
  • 쿼드 정밀도로 실행 ( ./configure --with-precision=__float128 --download-f2cblaslapackPETSc 3.2 이상 버전, 버전 4.6 이상 GNU 컴파일러 필요)
  • Jacobian이 더 잘 조절되도록 단위 (비차 원화), 경계 조건 스케일링 또는 공식을 변경하십시오.
  • 연속 1 차 도함수가없는 함수의 기능을 수정 if합니다 (잔상 평가에 문장 이있을 때 발생합니다 ( 예 : 위상 변경 또는 TVD 제한 기). 불연속성이 근본적으로 중요한 경우 변형 부등식 솔버 ( SNESVINEWTONRSLS )를 사용하십시오 .
  • 신뢰 영역 방법을 시도하십시오 ( -ts_type tr, 매개 변수를 조정해야 할 수도 있음).
  • 솔루션을 알고있는 지점에서 일부 연속 매개 변수로 실행하십시오 . 정상 상태 문제 해결에 대해서는 TSPSEUDO 를 참조하십시오 . PHCpack과 같은 호모 토피 솔버 패키지가 있으며 가능한 모든 솔루션을 얻을 수 있지만 (모두가 발견되었다고 말할 수 있음) 확장 할 수 없으며 작은 문제 외에는 해결할 수 없습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.