ตัวเลือกขนาดขั้นตอนโดยใช้ ODE ใน matlab


12

เฮ้มีและขอบคุณที่ให้เวลาเพื่อดูคำถามของฉัน นี่เป็นคำถามที่ฉันได้โพสต์ก่อนหน้านี้ใน physics.stackexchange.com

ขณะนี้ฉันกำลังศึกษาสปินทริปปินเตอร์ 2 มิติ Bose-Einstein Condensate และอยากรู้เกี่ยวกับสถานะพื้นฐานของระบบนี้ วิธีการทางคณิตศาสตร์ของการเดินทางไปสภาพพื้นดินที่เรียกว่าวิธีการที่เวลาจินตนาการ

วิธีนี้ง่ายมากที่เวลาในกลศาสตร์ควอนตัมถูกแทนที่ด้วยจินตภาพหนึ่ง ทดแทนนี้ทำให้อนุภาคพลังงานสูงในระบบของฉันสลายตัวเร็วกว่าพลังงานต่ำ การทำให้จำนวนอนุภาคกลับมาเป็นปกติในทุกขั้นตอนของการคำนวณเราจะจบลงด้วยระบบของอนุภาคพลังงานต่ำสุดหรือที่รู้จัก สภาพพื้นดิน

t=iτ

สมการ (s) ในคำถามเป็นเชิงเรียกว่าไม่เชิงเส้นSchrödingerสมบางครั้งสม Gross-Pitaevskii เพื่อแก้ปัญหาที่ฉันใช้ Matlabs ode45 ซึ่งวิวัฒนาการระบบไปข้างหน้าในเวลาและในที่สุดก็ถึงสภาพพื้นดิน

  • บันทึก! สมการไม่เชิงเส้นSchrödingerรวมถึง laplacian และคำที่แตกต่างอื่น ๆ ในอวกาศ ทั้งหมดนี้ได้รับการแก้ไขโดยใช้การแปลงฟูริเยร์ที่รวดเร็ว ในที่สุดเรามีเวลาเพียง ODE * * * *

ปัญหาและคำถามของฉัน:การคำนวณไปจากเพื่อt_fode45 ถูกใส่ไว้ในfor for loop ดังนั้นมันจึงไม่คำนวณเวกเตอร์ยักษ์ในเวลาเดียวกัน รอบแรกจะเริ่มต้นด้วย ode45 (odefun, ) และจากนั้นไปในครั้งต่อไปจาก\ นี่คือขั้นตอนเวลาคือปัญหาของฉัน ตัวเลือกที่แตกต่างกันในขั้นตอนเวลาทำให้ฉันแก้ปัญหาสถานะพื้นดินที่แตกต่างกันและฉันไม่รู้ว่าจะกำหนดขั้นตอนเวลาใดให้สถานะพื้นดินที่ถูกต้อง "มากที่สุด"!T [ T 0 , ... , เสื้อ ] [ T 0 , T 0 + Δ / 2 , T 0 + Δ ] , Y , ... T 0 + Δ Δt0tf[t0,,tf][t0,t0+Δ/2,t0+Δ],y,t0+ΔΔ

ความพยายามของฉัน:ฉันรู้ว่าในโครงการนี้ขั้นตอนเวลามากจะทำให้อนุภาคจำนวนมากสลายตัวก่อนถูกทำให้เป็นอนุภาคในจำนวนปกติในขณะที่ขั้นตอนเวลาขนาดเล็กจะทำให้อนุภาคมีขนาดเล็กลงก่อนที่จะถูกทำให้เป็นมาตรฐาน ความคิดเริ่มต้นของฉันคือขั้นตอนเวลาน้อยควรให้คำตอบที่แม่นยำยิ่งขึ้น แต่ดูเหมือนจะตรงกันข้าม

ฉันไม่ใช่ผู้เชี่ยวชาญด้านตัวเลขดังนั้นการเลือก ode45 จึงเป็นเรื่องง่าย ode113 ให้สิ่งเดียวกันกับฉัน :(

ไม่มีใครมีความคิดใด ๆ ในเรื่องนี้ แจ้งให้เราทราบหากต้องการรายละเอียดเพิ่มเติม

ขอบคุณ.

อัปเดต 1: ฉันค้นคว้าวิธีเวลาในการจินตนาการและ ODE แล้ว ดูเหมือนว่าหากขั้นตอนเวลาไม่เล็กพอสิ่งทั้งหมดจะไม่เสถียร นี่ทำให้ฉันสงสัยว่าสมการไม่เชิงเส้นของฉันนั้นแข็งซึ่งทำให้สิ่งต่าง ๆ ยากขึ้นกว่าที่ฉันเข้าใจ ฉันจะแจ้งให้คุณทราบ

อัปเดต 2: แก้ไขแล้ว: ปัญหานี้เกิดขึ้นจริงจากการทำให้เป็นมาตรฐานภายนอก ODE หากการทำให้เป็นมาตรฐานนั้นถูกเก็บไว้ใน odefun ดังนั้น ODE จะส่งกลับผลลัพธ์เดียวกันสำหรับตัวเลือกที่แตกต่างกันของขั้นตอนเวลา "นอก" เพื่อนร่วมงานของฉันแสดงรหัสเก่าแก่ฉันและฉันเพิ่งเพิ่มหนึ่งบรรทัดใน odefun ของฉัน

function y_out = odefun(t,y_in,...variables...) 

    ...
    [ Nonlinear equations evaluated ]  
    ...


    y_out = y_out + 0.1*y_in*(N0-Ntemp) ;
end

บรรทัดสุดท้ายจะคำนวณความแตกต่างของจำนวนอนุภาคปัจจุบัน (Ntemp) และจำนวนของอนุภาคที่ระบบควรเก็บ (N0) มันเพิ่มส่วนของอนุภาคกลับไปที่เอาต์พุตดังนั้นจึงสร้างความเสถียรของจำนวนอนุภาคทั้งหมดในระบบแทนที่จะปล่อยให้อนุภาคเหล่านั้นสลายตัวไปหมด

ฉันจะถามคำถามใหม่เกี่ยวกับมิติของปัญหาและความแตกต่างบางประการในการทำงานกับ picoseconds หรือ nanoseconds เป็นขั้นตอนเวลาใน ODE

ขอบคุณทุกคน. :)


3
ปัญหาพื้นฐานคือคุณกำลังบังคับใช้วิธีการปรับตัวที่ode45()จะทำตามขั้นตอนที่เท่ากัน ทำไมคุณหลีกเลี่ยงการสร้าง "เวกเตอร์ยักษ์" อย่างแม่นยำใช่ไหม หากคุณต้องการแต้มที่เท่ากันให้ode45()ดำเนินการตามปกติแล้วใช้การแก้ไข
JM

อืม ... นี่อาจเป็นปัญหา ต้นกำเนิดของขั้นตอนคงที่เหล่านี้คือบางแห่งที่ฉันต้องการทำให้จำนวนอนุภาคกลับเป็นปกติก่อนที่พวกมันจะสลายตัว แต่บางทีฉันสามารถทำได้โดยใส่การทำให้เป็นมาตรฐานในodefunและใช้ "เวกเตอร์เวลายักษ์" นอกจากนี้อินพุตลงใน ode45 คือตัวเลข 4 * 129 * 129 ฉันกลัวว่าฉันไม่ได้ใช้ขั้นตอนเวลาฉันจะไม่มีความจำเพียงพอ y

หากหน่วยความจำทำหน้าที่ควรมีตัวเลือกในการode45()ที่จะช่วยให้คุณรักษาขั้นตอนที่ใหญ่กว่าเกณฑ์ที่กำหนด; คุณอาจต้องการดูว่า
JM

1
คำตอบคือใช้ประมาณการข้อผิดพลาดเฉพาะที่ มีสิ่งหนึ่งที่สร้างไว้ใน ODE45 ดังนั้นสิ่งที่ง่ายที่สุดคือใช้สิ่งนั้น แต่คุณสามารถสร้างรหัสขึ้นมาเองได้
David Ketcheson

1
ในคำตอบของการติดตามคำถามมันกลับกลายเป็นว่าเป็นปริมาณมิติที่มีขนาด{} อาจได้ผลลัพธ์ที่สอดคล้องกันมากกว่านี้กับโดยที่เป็นขั้นตอนเวลา? 1 /ครั้งα0.11/timeΔtαΔt(NtN0)Δt
Stefano M

คำตอบ:


4

เนื่องจากคุณไม่ได้โพสต์รหัส MATLAB ของคุณฉันไม่แน่ใจว่าคุณเรียก ode45 ได้อย่างไร ฉันเดาว่าคุณกำลังเปลี่ยนเวกเตอร์ tspan (อาร์กิวเมนต์ที่สอง) ในแต่ละการโทรเป็น ode45 สิ่งแรกที่ต้องเข้าใจคือเวกเตอร์ tspan มี (เกือบ) ไม่มีผลกับขั้นตอนเวลาที่ใช้โดย ode45 เวกเตอร์ tspan ช่วยให้คุณสามารถส่งไปยัง ode45 ช่วงเวลาของการรวมและในเวลาที่คุณต้องการออก ขั้นตอนเวลาที่ใช้โดยอัลกอริทึม Runga-Kutta ใน ode45 จะถูกปรับภายในเพื่อให้ได้ความแม่นยำที่กำหนดไว้ พารามิเตอร์สองตัวที่ควบคุมความแม่นยำนี้คือ RelTol และ AbsTol ในโครงสร้างตัวเลือกที่ส่งไปยัง ode45 พวกเขามีค่าเริ่มต้นที่สมเหตุสมผลและเนื่องจากคุณไม่ได้พูดถึงสิ่งเหล่านี้ฉันถือว่าคุณไม่ได้เปลี่ยนพวกเขา

ฉันพูดว่า "เกือบ" ไม่มีผลกับขั้นตอนเวลา ode45 ปกติ หากคุณกำลังร้องขอเอาต์พุตในช่วงเวลาที่มีขนาดเล็กมากเมื่อเทียบกับขั้นตอนเวลา ode45 ที่จะใช้เป็นอย่างอื่นก็จะต้องลดขั้นตอนเวลาเพื่อตอบสนองคำขอเอาต์พุตของคุณ ฉันเชื่อว่านี่คือสิ่งที่ JM กำลังทำอยู่ เหตุใดคุณจึงต้องการโซลูชันในเวลาเอาต์พุตจำนวนมาก โดยปกติแล้วจะเพียงพอที่จะร้องขอเอาต์พุตในเวลาเพียงพอเพื่อสร้างพล็อตที่ราบรื่น

สำหรับการเปลี่ยนแปลงวิธีแก้ไขที่คุณเห็นอาจเป็นค่าเริ่มต้นของ RelTol และ AbsTol ที่ไม่เหมาะสมสำหรับปัญหาของคุณ ฉันขอแนะนำให้แทนที่ลูปของคุณใน ode45 ด้วยการโทรครั้งเดียวร้องขอเอาต์พุตในจำนวนครั้งที่สมเหตุสมผลและทดสอบด้วย RelTol และ AbsTol ที่มีค่าน้อยกว่าจนกว่าคุณจะได้โซลูชันที่รวมกัน


ขอบคุณสำหรับคำตอบ. เหตุผลที่ฉันต้องการวิธีแก้ปัญหาที่เอาต์พุตหลายครั้งก็เพราะว่าถ้าฟังก์ชั่นคลื่นไม่ได้ทำให้เป็นปกติแล้วทุกอย่างก็จะสลายตัวและระบบของฉันก็ว่างเปล่า นั่นเป็นเหตุผลที่ฉันใส่ ode45 ลงในลูปที่มีเวกเตอร์ tspan ขนาดเล็กเพื่อให้ฉันสามารถทำให้ปกติอีกครั้งหลังจากเวกเตอร์ tspan แต่ละอัน

2

เนื่องจากสมการไม่เชิงเส้นSchrödingerนั้นก็เป็นแบบไม่เชิงเส้นดังนั้นจึงอาจมีสถานะนิ่งจำนวนมากซึ่งบางอันอาจมีเสถียรภาพ ในความเป็นจริงทางกายภาพเริ่มจากรัฐหนึ่งระบบจะพัฒนาไปสู่สถานะสุดท้าย หากรูปแบบตัวเลขให้ผลลัพธ์ที่แตกต่างสำหรับการแยกประเภทที่แตกต่างกัน (ขั้นตอนเวลา) นี่เป็นข้อบกพร่องพื้นฐานของการแยกย่อยของคุณ ตรวจสอบรหัสของคุณ

ψ0

dψdt=F(ψ),
F(ψ0)=0.
G(ψ)=ΩE(ψ)
E()F(ψ)=0E(ψ)E(ψ)=|ψ|4

ใช่. ฉันพล็อตโปรไฟล์ความหนาแน่นของโซลูชันเอาต์พุตของฉันและเมื่อมันไม่เปลี่ยนแปลงเป็นเวลานานโดยทั่วไปหยุดการพัฒนาฉันคิดว่าฉันได้มาถึงสถานะนิ่ง แต่ฉันไม่แน่ใจว่าการดูความหนาแน่นของพลังงานสามารถช่วยได้เนื่องจากฟังก์ชั่นคลื่นเป็นสปินเนอร์ที่มี (+2, +1, -1, -2) ส่วนประกอบการหมุน ฉันไม่คิดว่าการรวมส่วนประกอบแต่ละอย่างจะบอกฉันถึงพลังงานของคอนเดนเสท แต่เมื่อฉันไปถึงสภาพพื้นดินความหนาแน่นของพลังงานควรจะอยู่กับที่และคงที่ในเวลานี่เป็นเงื่อนงำสำหรับการแก้ปัญหาที่ถูกต้อง

1

แก้ไขปัญหา:

การทำให้เป็นมาตรฐานจะต้องเป็นส่วนหนึ่งของฟังก์ชั่นที่ประเมินใน ODE การแยก ODE ในหลายขั้นตอนและการทำให้เป็นมาตรฐานระหว่างพวกเขาทำให้เกิดความไม่แน่นอนเชิงตัวเลขและสร้างผลลัพธ์ที่แตกต่างกันขึ้นอยู่กับช่วงเวลาที่ ODE แบ่งออกเป็น (ดูการแก้ไข 2 ในคำถามสำหรับรายละเอียดเพิ่มเติม)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.