giải quyết các ODE được ghép nối với các ràng buộc giá trị ban đầu và giá trị cuối cùng


11

Bản chất của câu hỏi của tôi là như sau: Tôi có một hệ thống gồm hai ODE. Một cái có ràng buộc giá trị ban đầu và cái kia có ràng buộc giá trị cuối cùng. Điều này có thể được coi là một hệ thống duy nhất với ràng buộc giá trị ban đầu đối với một số biến và ràng buộc giá trị cuối cùng đối với các biến khác.

Đây là những thông tin chi tiết:

Tôi đang cố gắng sử dụng bộ điều khiển LQR hữu hạn thời gian liên tục để điều khiển một hệ thống động lực tuyến tính. Tôi muốn tiếp tục sử dụng hệ sinh thái Python.

Hệ thống có dạng , theo x ( 0 ) = x 0x˙(t)=Ax(t)+Bu(t)x(0)=x0

Giải pháp LQR tạo ra ma trận sao cho đầu vào điều khiển tối ưu u (t), tuyến tính theo x ( t ) , là u ( t ) = K ( t ) x ( t ) .K(t)x(t)u(t)=K(t)x(t)

Trong đó K(t)=R1BTP(t)

là giải pháp cho phương trình vi phân Riccati thời gian liên tục (lưu ý rằng P ( t ) này là một ma trận)P(t)P(t)

phụ thuộc vàoP(tf)=QP˙(t)=ATP(t)P(t)A+P(t)BR1BTP(t)+QP(tf)=Q

, B , x 0 , Q , Q f , R , t f đều được đưa ra.ABx0QQfRtf

Trong tiếng Anh: bạn có một số hệ thống động bắt đầu ở trạng thái . Bộ điều khiển LQR tạo ra ma trận phản hồi để sử dụng giữa thời gian 0t f ( t f thường được gọi là chân trời thời gian của vấn đề)x00tftf

Lưu ý rằng hai ODE chỉ được ghép theo một hướng - giải pháp cho không phụ thuộc vào x ( t ) . Do đó, một cách để giải quyết vấn đề là đảo ngược phương trình Riccati để biến bài toán giá trị cuối cùng thành bài toán giá trị ban đầu và tìm một giải pháp số giữa thời gian 0t f bằng cách sử dụng bộ tích hợp ODE tiêu chuẩn. Sau đó tôi có thể sử dụng giải pháp số này để tìm x ( t )P(t)x(t)0tfx(t). Điều này liên quan đến tôi bởi vì bộ giải ODE số cho x (t) sẽ không nhất thiết phải lấy mẫu ODE cùng lúc với thời gian trong giải pháp số thành $ P (t). Có lẽ có một số cách thông minh để thực thi điều này.

Một cách khác mà tôi thấy trước khi giải quyết vấn đề là cùng nhau giải quyết vấn đề này, nhưng tôi không biết làm thế nào để đối phó với sự pha trộn giữa các ràng buộc giá trị ban đầu và giá trị cuối cùng. Là những vấn đề tính toán nặng nề để giải quyết? Tôi có thể làm điều đó trong SciPy / Python không?

Câu trả lời:


8

P(t)t[0,tf]

Bạn có thể làm điều này bằng cách nội suy giữa các giá trị đầu ra . Tôi khuyên bạn nên sử dụng phương pháp Runge-Kutta hỗ trợ đầu ra dày đặc. Ví dụ, scipy.integrate.ode.dopri5dựa trên một phương pháp như vậy. Vì vậy, bạn sẽ có thể chỉ định thời gian đầu ra cách đều nhau mà không bắt buộc nhà tích hợp thực hiện các bước rất nhỏ (giả sử rằng giao diện scipy với nó được triển khai chính xác).


P(t)P(t)

6

Đây được gọi là một vấn đề giá trị biên hai điểm và được nghiên cứu kỹ.

Phương pháp chụp rất đơn giản để lập trình nhưng có thể cực kỳ không ổn định về số lượng.

Cách tiêu chuẩn để giải quyết các vấn đề này là sử dụng phương pháp chụp nhiều lần và giải hệ phương trình phi tuyến tương ứng bằng một bộ giải phi tuyến chuẩn. Để biết danh sách các bộ giải cho các hệ phương trình phi tuyến, hãy xem, ví dụ:
http://www.mat.univie.ac.at/~neum/glopt/software_l.html#nonlin

Bạn lấy các biến trạng thái trên một lưới thông thường theo thời gian (thường là không cần lưới rất tốt) và khi phương trình các điều kiện biên và ánh xạ ánh xạ biến thời gian t thành biến thời gian t + h. Điều này cho nhiều phương trình như các biến. Bạn chỉ cần cung cấp các thói quen để đánh giá ánh xạ này cho một cấu hình nhất định của các trạng thái trên lưới và bộ giải phi tuyến làm mọi thứ khác. (Có lẽ bạn cần nhiều điểm bắt đầu nếu dự đoán ban đầu của bạn kém.)

Wikipedia http://en.wikipedia.org/wiki/Direct_mult Môn_sh Boot_method có một mô tả hữu ích về quy trình, nếu mô tả trên không đủ chi tiết cho bạn. Cuốn sách của Stoer / Bulirsch trích dẫn ở đó cung cấp chi tiết đầy đủ.


5

Tôi không biết làm thế nào để làm điều đó trong Python, nhưng từ khóa bạn muốn tìm trong tài liệu là "phương pháp chụp". Đó là tên của một phương thức giải quyết các vấn đề có cả ràng buộc giá trị ban đầu và cuối cùng.


1

AUTO có thể giải quyết hai điểm BVP và có giao diện python và tương đối dễ cài đặt. http://www.ma.hw.ac.uk/~gabriel/auto07/node6.html .

Nếu bạn đi theo con đường muốn giải quyết P (t) trước và đưa nó đến ODE khác làm đầu vào, thì một cách hiệu quả để thiết lập đó là sử dụng PyDSTool. PyDSTool rất dễ cài đặt trên mọi nền tảng, xem http://pydstool.sf.net . Theo mặc định, nó sẽ chỉ sử dụng phép nội suy tuyến tính cho giải pháp được tính toán trước đó của bạn (để tính toán ở độ phân giải thời gian tốt). Tuy nhiên, bạn có thể buộc PyDSTool bước tới chính xác các điểm thời gian mong muốn ngay cả với một nhà tích hợp thích ứng (mặc dù điều đó có thể không hiệu quả và dẫn đến không chính xác). Nhưng với các bước thời gian tối đa đủ nhỏ, phép nội suy tuyến tính và tích hợp nhanh (Dopri được tích hợp) cho hệ thống thứ hai có nghĩa là bạn sẽ ổn cho các hệ thống "thông thường" như thế này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.