เมื่อเร็ว ๆ นี้ฉันได้ทำการเปรียบเทียบตัวแก้ปัญหาที่ไม่ใช่เชิงเส้นที่แตกต่างจาก scipyและรู้สึกประทับใจเป็นพิเศษกับตัวอย่างของNewton-Krylov ใน Scipy Cookbookซึ่งพวกเขาแก้สมการเชิงอนุพันธ์อันดับสองกับคำที่ไม่เป็นเชิงเส้นในโค้ดประมาณ 20 บรรทัด
ฉันแก้ไขโค้ดตัวอย่างเพื่อแก้สมการปัวซองที่ไม่ใช่เชิงเส้น ( เรียกอีกอย่างว่าสมการปัวซอง - โบลซ์มันน์ดูหน้า 17 ในบันทึกเหล่านี้) สำหรับเซมิคอนดักเตอร์ heterostructures ซึ่งมีรูปแบบ
(นี่คือฟังก์ชั่นที่เหลือที่ถูกส่งผ่านไปยังตัวแก้ไข)
นี่คือปัญหาไฟฟ้าสถิตที่และที่มีฟังก์ชั่นแบบไม่เชิงเส้นสำหรับแบบฟอร์มE_f)} รายละเอียดที่นี่ไม่สำคัญ แต่ประเด็นก็คือฟังก์ชั่นที่ไม่ใช่เชิงเส้นแตกต่างกันอย่างมากกับดังนั้นฟังก์ชั่นที่เหลือสามารถแตกต่างกันไปในช่วงใหญ่ (ด้วยการเปลี่ยนแปลงเล็กน้อย ใน\
ฉันแก้สมการเชิงตัวเลขด้วย Newton-Krylov ของ scipy แต่มันจะไม่มีวันลู่เข้าหากัน (อันที่จริงมันมักจะรายงานข้อผิดพลาดกับการคำนวณ Jacobian) ฉันเปลี่ยนจากSolver ของNewton-Krylovมาเป็นfsolve (ซึ่งมีพื้นฐานจาก MINPACK hybrd) และมันใช้งานได้เป็นครั้งแรก!
มีเหตุผลทั่วไปไหมที่ทำไม Newton-Krylov ไม่เหมาะกับปัญหาบางอย่าง? สมการอินพุตต้องถูกปรับเงื่อนไขอย่างใดไหม?
อาจต้องการข้อมูลเพิ่มเติมเพื่อแสดงความคิดเห็น แต่ทำไมคุณคิดว่า fsolve ใช้งานได้ในกรณีนี้
sol = newton_krylov(func, guess, method='gmres')
) ช่วยแก้ปัญหาได้ ไม่แน่ใจว่าทำไม แต่ทุกคนที่มีปัญหานี้อาจพิจารณาทำเช่นเดียวกัน