ฉันพยายามที่จะแก้สมการการพาความร้อน แต่มีความผันผวนที่แปลกประหลาดปรากฏขึ้นในการแก้ปัญหาเมื่อคลื่นสะท้อนจากขอบเขต หากใครได้เห็นสิ่งประดิษฐ์นี้ก่อนที่ฉันจะสนใจที่จะรู้สาเหตุและวิธีการหลีกเลี่ยง!
นี่คือ gif แบบเคลื่อนไหวเปิดในหน้าต่างแยกต่างหากเพื่อดูภาพเคลื่อนไหว (มันจะเล่นเพียงครั้งเดียวหรือไม่พร้อมกันในทันที!
ขอให้สังเกตว่าการขยายพันธุ์ดูเหมือนจะมีเสถียรภาพสูงจนกระทั่งคลื่นเริ่มสะท้อนจากขอบเขตแรก คุณคิดว่าจะเกิดอะไรขึ้นที่นี่ ฉันใช้เวลาสองสามวันในการตรวจสอบรหัสของฉันและไม่พบข้อผิดพลาดใด ๆ มันแปลกเพราะมันดูเหมือนจะมีวิธีแก้ปัญหาที่แพร่กระจายสองอย่าง: หนึ่งบวกและลบหนึ่ง หลังจากการสะท้อนจากขอบเขตแรก การแก้ปัญหาดูเหมือนว่าจะเดินทางไปตามจุดตาข่ายที่อยู่ติดกัน
รายละเอียดการใช้งานมีดังนี้
สมการการพาความร้อน
โดยที่คือความเร็วในการแพร่กระจาย
Crank-Nicolson เป็นdiscretization ที่ไม่มีเงื่อนไข (ลิงก์ pdf) ที่ มีเสถียรภาพสำหรับสมการการพาความร้อนที่ให้มีการเปลี่ยนแปลงอย่างช้าๆในอวกาศ (มีส่วนประกอบความถี่ต่ำเท่านั้นเมื่อแปลงฟูริเยร์)
discretization ฉันได้ใช้คือ
การนำสิ่งที่ไม่ทราบทางด้านขวามาใช้จะเขียนในรูปแบบเส้นตรง
ที่ (จะใช้เวลาเฉลี่ยถ่วงน้ำหนักเท่า ๆ กันระหว่างจุดปัจจุบันและอนาคต) และx}r =
ชุดสมการนี้มีรูปแบบเมทริกซ์ , โดยที่,
เวกเตอร์และเป็นทราบและไม่ทราบปริมาณที่เราต้องการแก้
จากนั้นฉันใช้เงื่อนไขขอบเขตของ Neumann แบบปิดบนขอบเขตด้านซ้ายและด้านขวา ตามขอบเขตปิดฉันหมายถึงในทั้งสองอินเตอร์เฟส สำหรับขอบเขตที่ปิดแล้วปรากฎว่า (ฉันจะไม่แสดงการทำงานของฉันที่นี่) เราแค่ต้องแก้สมการเมทริกซ์ด้านบน ตามที่ชี้แจงโดย @DavidKetcheson สมการเมทริกซ์ข้างต้นอธิบายถึงเงื่อนไขขอบเขตของ Dirichletเงื่อนไขขอบเขต สำหรับเงื่อนไขขอบเขตของนอยมันน์
ปรับปรุง
พฤติกรรมดูเหมือนว่าค่อนข้างอิสระต่อการเลือกค่าคงที่ที่ฉันใช้ แต่สิ่งเหล่านี้เป็นค่าสำหรับพล็อตที่คุณเห็นด้านบน:
- = 2
- DX = 0.2
- dt = 0.005
- = 2 (Gaussian hwhm)
- = 0.5
อัปเดต II
การจำลองที่มีสัมประสิทธิ์การแพร่กระจายที่ไม่เป็นศูนย์, (ดูความคิดเห็นด้านล่าง) การสั่นจะหายไป แต่คลื่นไม่สะท้อนอีกต่อไป!? ฉันไม่เข้าใจว่าทำไม