การแก้ ODE คู่กับข้อ จำกัด ค่าเริ่มต้นและค่าสุดท้าย


12

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

นี่คือรายละเอียด:

ฉันกำลังพยายามใช้คอนโทรลเลอร์ LQR ของขอบเขตเวลาต่อเนื่องเพื่อขับเคลื่อนระบบไดนามิคเชิงเส้น ฉันต้องการใช้ระบบนิเวศของงูหลามต่อไป

ระบบอยู่ในรูปแบบ , ขึ้นอยู่กับx(0)=x0x˙(t)=Ax(t)+Bu(t)x(0)=x0

วิธีการแก้ปัญหา LQR สร้างเมทริกซ์เช่นที่อินพุตควบคุมที่เหมาะสม U (t) เส้นตรงเป็น(t)x ( t ) u ( t ) = K ( t ) x ( t )K(t)x(t)u(t)=K(t)x(t)

โดยที่K(t)=R1BTP(t)

และคือคำตอบของสมการเชิงอนุพันธ์ Riccati เวลาต่อเนื่อง (โปรดทราบว่านี้เป็นเมทริกซ์)P ( t )P(t)P(t)

P˙(t)=ATP(t)P(t)A+P(t)BR1BTP(t)+Qภายใต้P(tf)=Q

A, , , , , ,จะได้รับทั้งหมดx 0 Q Q f R t fBx0QQRเสื้อ

ในภาษาอังกฤษ: คุณมีพลังของระบบที่จะเริ่มต้นในรัฐx_0ตัวควบคุม LQR สร้างเมทริกซ์ข้อเสนอแนะเพื่อใช้ระหว่างเวลาและ (โดยทั่วไปเรียกว่าเส้นขอบฟ้าเวลาของปัญหา) 0 t f t fx00เสื้อเสื้อ

โปรดทราบว่าทั้งสองเป็นคู่ ODEs ในทิศทางเดียวเท่านั้น - วิธีการแก้ไม่ขึ้นอยู่กับ(t) ดังนั้นวิธีหนึ่งในการแก้ปัญหาคือการย้อนกลับสมการ Riccati เพื่อเปลี่ยนปัญหาค่าสุดท้ายให้เป็นปัญหาค่าเริ่มต้นและหาวิธีแก้ปัญหาเชิงตัวเลขระหว่างเวลาและโดยใช้ตัวรวม ODE มาตรฐาน แล้วฉันสามารถใช้แก้ปัญหาเชิงตัวเลขนี้เพื่อหา(t) สิ่งนี้เกี่ยวข้องกับฉันเพราะตัวแก้ ODE เชิงตัวเลขสำหรับ x (t) ไม่จำเป็นต้องสุ่มตัวอย่าง ODE ในเวลาเดียวกันกับเวลาในการแก้ปัญหาเชิงตัวเลขถึง $ P (t) อาจมีวิธีที่ฉลาดในการบังคับใช้สิ่งนี้P(เสื้อ)x(เสื้อ)0เสื้อx(เสื้อ)

วิธีอื่นที่ฉันคาดหวังในการแก้ปัญหาคือการแก้ไขระบบด้วยกัน แต่ฉันไม่รู้วิธีจัดการกับการผสมผสานของข้อ จำกัด ค่าเริ่มต้นและค่าสุดท้าย ปัญหาเหล่านี้หนักมากในการแก้หรือไม่? ฉันสามารถทำได้ใน SciPy / Python หรือไม่

คำตอบ:


8

ฉันไม่เห็นด้วยกับคำตอบอื่น ๆ เนื่องจากคุณมีการเชื่อมต่อแบบทางเดียวระหว่างปัญหาย้อนกลับและเวลาไปข้างหน้าเท่านั้นจึงจะมีประสิทธิภาพมากขึ้นในการแก้ปัญหาตามลำดับตามที่คุณเสนอครั้งแรก คุณก็ต้องแก้ปัญหาที่สามารถได้รับการประเมินในเวลาใด ๆt_f] P(เสื้อ)เสื้อ[0,เสื้อ]

คุณสามารถทำเช่นนี้โดยinterpolating ระหว่างค่าเอาท์พุท ฉันขอแนะนำให้คุณใช้วิธีการ Runge-Kutta ที่รองรับการส่งออกหนาแน่น ตัวอย่างเช่นscipy.integrate.ode.dopri5จะขึ้นอยู่กับวิธีการดังกล่าว ดังนั้นคุณควรจะสามารถระบุเวลาเอาท์พุทที่มีการเว้นระยะอย่างมากโดยไม่บังคับให้ผู้รวมระบบทำตามขั้นตอนเล็ก ๆ


ใช่มันง่ายกว่าแน่นอน คุณสามารถใช้วิธีการใดก็ได้เพื่อสร้างและP ( t )ที่จุดใด ๆ ที่ผู้รวบรวมเห็นว่าจำเป็นและสอดแทรกระหว่างด้วย Hermite spline ลูกบาศก์หากความแม่นยำของ O (h ^ 4) เพียงพอ P(เสื้อ)P'(เสื้อ)
Arnold Neumaier

6

สิ่งนี้เรียกว่าปัญหาค่าขอบเขตสองจุดและศึกษาอย่างดี

วิธีการถ่ายภาพนั้นง่ายมากในการตั้งโปรแกรม แต่อาจมีความไม่แน่นอนเชิงตัวเลขอย่างมาก

วิธีมาตรฐานในการแก้ปัญหาเหล่านี้ใช้วิธีการยิงหลายแบบและการแก้ระบบสมการไม่เชิงเส้นที่สอดคล้องกันโดยตัวแก้แบบไม่เชิงเส้นมาตรฐาน สำหรับรายการของนักแก้ปัญหาสำหรับระบบสมการไม่เชิงเส้นดูตัวอย่างเช่น
http://www.mat.univie.ac.at/~neum/glopt/software_l.html#nonlin

คุณใช้เวลาเป็นตัวแปรสถานะในกริดปกติในเวลา (โดยปกติไม่จำเป็นต้องมีกริดที่ดีมาก) และเป็นสมการเงื่อนไขขอบเขตและการแมปที่แมปตัวแปรเวลา t กับตัวแปรเวลา t + h สิ่งนี้ให้สมการได้มากเท่ากับตัวแปร คุณต้องจัดเตรียมรูทีนสำหรับการประเมินการแม็พนี้เพื่อกำหนดค่าสถานะที่กำหนดบนกริดและตัวแก้ปัญหาแบบไม่เชิงเส้นทำทุกอย่างอื่น (บางทีคุณอาจต้องการจุดเริ่มต้นหลายจุดถ้าการเดาเริ่มต้นของคุณแย่)

Wikipedia http://en.wikipedia.org/wiki/Direct_multiple_shooting_method มีคำอธิบายที่เป็นประโยชน์เกี่ยวกับกระบวนการหากคำอธิบายข้างต้นไม่ได้มีรายละเอียดเพียงพอสำหรับคุณ หนังสือโดย Stoer / Bulirsch อ้างว่ามีรายละเอียดครบถ้วน


5

ฉันไม่รู้วิธีการทำใน Python แต่คำหลักที่คุณต้องการค้นหาในวรรณคดีคือ "วิธีการยิง" นั่นคือชื่อของวิธีการที่แก้ปัญหาที่มีข้อ จำกัด ค่าเริ่มต้นและสุดท้าย


1

AUTO สามารถแก้ BVP สองจุดและมีอินเทอร์เฟซหลามและติดตั้งได้ง่าย http://www.ma.hw.ac.uk/~gabriel/auto07/node6.html

หากคุณไปยังเส้นทางที่ต้องการแก้ไข P (t) ก่อนและป้อนไปยัง ODE อื่นเป็นอินพุตดังนั้นวิธีที่มีประสิทธิภาพในการตั้งค่านั้นคือการใช้ PyDSTool PyDSTool เป็นเรื่องง่ายมากที่จะติดตั้งบนแพลตฟอร์มใด ๆ ดูhttp://pydstool.sf.net ตามค่าเริ่มต้นแล้วจะใช้การแก้ไขเชิงเส้นโดยตรง แต่สำหรับโซลูชันที่คุณคำนวณไว้ก่อนหน้านี้ (ดังนั้นให้คำนวณด้วยความละเอียดแบบละเอียด) อย่างไรก็ตามคุณสามารถบังคับให้ PyDSTool ก้าวไปยังจุดเวลาที่ต้องการได้อย่างแน่นอนแม้จะมีผู้รวมระบบแบบปรับตัว (แม้ว่าอาจจะไม่มีประสิทธิภาพและนำไปสู่ความไม่ถูกต้อง) แต่ด้วยขั้นตอนเวลาสูงสุดเล็ก ๆ น้อย ๆ การประมาณค่าเชิงเส้นและตัวรวมที่รวดเร็ว (Dopri ถูกสร้างขึ้น) สำหรับระบบที่สองหมายความว่าคุณจะดีสำหรับระบบ "ปกติ" เช่นนี้

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