başlangıç ​​değer ve son değer kısıtlamalarıyla birleştirilmiş ODE'leri çözme


12

Sorumun özü şudur: İki ODE sistemim var. Birinin başlangıç ​​değeri kısıtlaması, diğerinin son değeri kısıtlaması vardır. Bu, bazı değişkenler üzerinde başlangıç ​​değeri kısıtlaması ve diğerleri üzerinde son değer kısıtlaması olan tek bir sistem olarak düşünülebilir.

Detaylar burada:

Doğrusal bir dinamik sistem sürmek için sürekli-zaman sonlu-ufuk LQR kontrolörü kullanmaya çalışıyorum. Python ekosistemini kullanmaya devam etmek istiyorum.

Sistem x ( 0 ) = x 0'a tabi olarak biçimindedir.x˙(t)=birx(t)+Bu(t)x(0)=x0

LQR çözeltisi , x ( t ) cinsinden lineer optimal kontrol girişi u (t) u ( t ) = K ( t ) x ( t ) olacak şekilde bir matrisi üretir .K(t)x(t)u(t)=K(t)x(t)

burada K(t)=R,-1BTP(t)

ve sürekli bir zaman Riccati diferansiyel denkleminin çözümüdür (bu P ( t ) ' nin bir matris olduğuna dikkat edin )P(t)P(t)

,P(tf)=Q'ya tabiP˙(t)=-birTP(t)-P(t)bir+P(t)BR,-1BTP(t)+SP(tf)=S

, B , x 0 , S , S f , R, , t f tüm verilmektedir.birBx0QQfRtf

İngilizce: durumunda başlayan bir dinamik sisteminiz var . LQR kontrol saat arasındaki kullanmak için bir geri besleme matrisi oluşturur 0 ve t f ( t f yaygın sorun zaman ufku olarak adlandırılır)x00tftf

İki ODE'nin sadece bir yönde bağlandığını unutmayın - çözüm x ( t )' ye bağlı değildir . Bu nedenle, sorunu çözmenin bir yolu, nihai değer problemini bir başlangıç-değer problemine dönüştürmek ve standart bir ODE entegratörü kullanarak 0 ve t f arasında sayısal bir çözüm bulmak için Riccati denklemini tersine çevirmektir . Daha sonra bu sayısal çözümü x ( t ) bulmak için kullanabilirimP(t)x(t)0tfx(t). Bu beni ilgilendiriyor, çünkü x (t) için sayısal ODE çözücü, ODE'yi sayısal çözümdeki zamanlarla aynı anda $ P (t) olarak örneklemeyecektir. Belki de bunu uygulamaya koymanın akıllıca bir yolu vardır.

Sorunu çözmeyi öngördüğüm diğer yol, sistemi birlikte çözmektir, ancak başlangıç ​​değeri ve son değer kısıtlarının karışımıyla nasıl başa çıkılacağını bilmiyorum. Bu sorunları hesaplamak için ağır mı? SciPy / Python'da yapabilir miyim?

Yanıtlar:


8

Diğer cevaplara katılmıyorum. Geri ve ileri zaman problemleri arasında sadece tek yönlü bir bağlantınız olduğundan, ilk önerdiğiniz gibi sırayla çözmek çok daha verimli olacaktır. Sadece bir çözelti mi herhangi bir zamanda en değerlendirilebilir t [ 0 , t f ] . P(t)t[0,tf]

Bunu , çıktı değerleri arasında enterpolasyon yaparak yapabilirsiniz . Yoğun çıktıyı destekleyen bir Runge-Kutta yöntemi kullanmanızı öneririz. Örneğin scipy.integrate.ode.dopri5, böyle bir yönteme dayanmaktadır. Bu nedenle, entegratörü çok küçük adımlar atmaya zorlamadan çok ince aralıklı çıkış süreleri belirleyebilmelisiniz (scipy arayüzünün doğru uygulandığını varsayarak).


Evet, bu gerçekten daha basit. Entegratörün gerekli bulduğu noktalarda ve P ( t ) üretmek için herhangi bir yöntemi kullanabilirsiniz ve eğer O (h ^ 4) doğruluğu yeterliyse kübik bir Hermite spline ile aralarında enterpolasyon yapabilirsiniz. P(t)P'(t)
Arnold Neumaier

6

Buna iki noktalı sınır değer problemi denir ve iyi çalışılmıştır.

Çekim yönteminin programlanması çok kolaydır, ancak sayısal olarak son derece kararsız olabilir.

Bu problemleri çözmenin standart yolu çoklu çekim yaklaşımı kullanmak ve karşılık gelen doğrusal olmayan denklem sistemini standart doğrusal olmayan bir çözücü ile çözmektir. Doğrusal olmayan denklem sistemleri için çözücülerin listesi için bkz., Ör.,
Http://www.mat.univie.ac.at/~neum/glopt/software_l.html#nonlin

Değişken olarak zaman içinde düzenli bir ızgaradaki durumları alırsınız (genellikle çok ince ızgaraya ihtiyaç duyulmaz) ve denklemler olarak sınır koşulları ve t zaman değişkenlerini t + h değişkenleriyle eşleştiren eşlemeler. Bu, değişkenler kadar denklem verir. Izgaradaki durumların belirli bir yapılandırması için bu eşlemeyi değerlendirmek için yalnızca rutinleri sağlamanız gerekir ve doğrusal olmayan çözücü diğer her şeyi yapar. (Belki ilk tahminleriniz zayıfsa birden fazla başlangıç ​​noktasına ihtiyacınız vardır.)

Yukarıdaki açıklama sizin için yeterince ayrıntılı değilse Wikipedia http://tr.wikipedia.org/wiki/Direct_multiple_shooting_method sürecin yararlı bir açıklamasına sahiptir. Stoer / Bulirsch'in burada adı geçen kitabı tüm detayları veriyor.


5

Python'da nasıl yapacağımı bilmiyorum, ancak literatürde aramak istediğiniz anahtar kelime "çekim yöntemi" dir. Bu, hem başlangıç ​​hem de son değer kısıtlamaları olan sorunları çözen bir yöntemin adıdır.


1

AUTO iki noktadan oluşan BVP'leri çözebilir ve bir python arabirimine sahiptir ve kurulumu nispeten kolaydır. http://www.ma.hw.ac.uk/~gabriel/auto07/node6.html .

Öncelikle P (t) 'yi çözmek ve diğer ODE'ye girdi olarak beslemek istemeniz halinde, bunu ayarlamanın etkili bir yolu PyDSTool kullanmaktır. PyDSTool'un herhangi bir platformda kurulumu çok kolaydır, bkz. Http://pydstool.sf.net . Varsayılan olarak, önceden hesaplanmış çözümünüz için yalnızca doğrusal enterpolasyon kullanır (bu yüzden bunu iyi zaman çözünürlüğünde hesaplayın). Bununla birlikte, uyarlanabilir bir entegratörle bile PyDSTool'u tam olarak istenen zaman noktalarına adım atmaya zorlayabilirsiniz (bu, verimsiz olabilir ve yanlışlıklara yol açabilir). Ancak yeterince küçük azami adımlarla, ikinci sistem için doğrusal enterpolasyon ve hızlı bir entegratör (Dopri yerleşik), bunun gibi "normal" sistemler için iyi olacağınız anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.