최근에 나는 scipy의 다른 비선형 솔버를 비교해 왔으며 특히 Scipy Cookbook 의 Newton-Krylov 예제 에서 약 20 줄의 코드로 비선형 반응 항으로 2 차 미분 방정식 방정식을 풀었습니다 .
예제 코드를 수정하여 반도체 이종 구조에 대한 비선형 Poisson 방정식 ( Poisson-Boltzmann 방정식이라고도 함, 이 노트의 17 페이지 참조)을 해결합니다.
(이것은 솔버에 전달되는 잔차 함수입니다.)
이것은 및 가 형식의 비선형 함수 인 정전기 문제 입니다. 여기서 자세한 내용은 중요하지 않지만 요점은 비선형 함수가 따라 기하 급수적으로 달라 지므로 잔차 함수는 약간의 변경 으로 큰 범위 ( 에서 달라질 수 있다는 것입니다 에서 .
나는이 방정식을 scipy의 Newton-Krylov로 수치 적으로 풀지 만 결코 수렴하지 않을 것입니다 (사실 항상 Jacobian을 계산할 때 오류를보고합니다). 나는 Newton-Krylov 솔버에서 fsolve (MINPACK hybrd 기반)로 전환했으며 처음으로 작동했습니다!
Newton-Krylov가 특정 문제에 적합하지 않은 일반적인 이유가 있습니까? 입력 방정식을 어떻게 든 조절해야합니까?
댓글을 달려면 더 많은 정보가 필요할 수 있지만이 경우 fsolve가 효과가 있다고 생각하는 이유는 무엇입니까?
sol = newton_krylov(func, guess, method='gmres')
)로 변경하면 문제가 해결 된다는 것을 알았습니다 . 왜 그런지 정확히 알지 못하지만이 문제가있는 다른 사람은 똑같이하는 것을 고려할 수 있습니다.