Bir ODE'nin sayısal çözümü neden kararsız bir dengeden uzaklaşıyor?


15

Çift sarkaçlı bir sistemin davranışını simüle etmek istiyorum. Sistem, harekete geçirilmeyen ve bu nedenle çoğunlukla yerçekiminden etkilenen bir çift sarkaç gibi davranacak olan 2 serbestlik dereceli bir robot manipülatördür. Çift sarkaçlı tek temel fark, kütle merkezlerinde kütle ve atalet özelliklerine sahip iki katı cisimden oluşmasıdır.

Temel olarak, ode45Matlab altında aşağıdaki türden bir ODE sistemini çözmek için programladım :

[10000M110M1200100M120M22][x˙1x˙2x˙3x˙4]=[x2V1G1x4V2G2]

burada x1 yataya göre birinci gövdenin açısı olan, x2 , ilk gövdenin açısal hızıdır; x3 birinci gövdesine göre ikinci gövdenin açısıdır ve x4 ikinci gövdenin açısal hızıdır. Tüm katsayılar, oluşturduğum rhsve fMassfonksiyonlarında aşağıdaki kodda belirtilmiştir .

clear all
opts= odeset('Mass',@fMass,'MStateDependence','strong','MassSingular','no','OutputFcn',@odeplot);
sol = ode45(@(t,x) rhs(t,x),[0 5],[pi/2 0 0 0],opts);

function F=rhs(t,x)
    m=[1 1];
    l=0.5;
    a=[0.25 0.25];
    g=9.81;
    c1=cos(x(1));
    s2=sin(x(3));
    c12=cos(x(1)+x(3));
    n1=m(2)*a(2)*l;
    V1=-n1*s2*x(4)^2-2*n1*s2*x(2)*x(4);
    V2=n1*s2*x(2)^2;
    G1=m(1)*a(1)*g*c1+m(2)*g*(l*c1+a(2)*c12);
    G2=m(2)*g*a(2)*c12;

    F(1)=x(2);
    F(2)=-V1-G1;
    F(3)=x(4);
    F(4)=-V2-G2;
    F=F';     
end

function M=fMass(t,x)
    m=[1 1];
    l=0.5;
    Izz=[0.11 0.11];
    a=[0.25 0.25];
    c2=cos(x(3));
    n1=m(2)*a(2)*l;
    M11=m(1)*a(1)^2+Izz(1)+m(2)*(a(2)^2+l^2)+2*n1*c2+Izz(2);
    M12=m(2)*a(2)^2+n1*c2+Izz(2);
    M22=m(2)*a(2)^2+Izz(2);
    M=[1 0 0 0;0 M11 0 M12;0 0 1 0;0 M12 0 M22];
end

Sistemin tamamen dikey bir konumda başlaması için x1 başlangıç ​​koşulunu (ilk gövdenin yataya göre açısı) nasıl ayarladığımı fark edin . Bu şekilde, sadece yerçekimi hareket ettiğinden, bariz sonuç sistemin bu konumdan hiç hareket etmemesi gerektiğidir.

NOT: aşağıdaki tüm grafiklerde, zamana göre x1 ve x3 çözümlerini çizdim .

ODE45

Simülasyonu 6 saniye boyunca çalıştırdığımda, ode45beklenen çözümü hiç sorun olmadan alıyorum, sistem olduğu yerde kalıyor ve hareket etmiyor:

enter image description here

Ancak, simülasyonu 10 saniye çalıştırdığımda, sistem mantıksız hareket etmeye başlar:

enter image description here

ODE23

Daha sonra ode23sorunun devam edip etmediğini görmek için simülasyonu çalıştırdım . Aynı davranışla sonuçlanıyorum, ancak bu sefer ıraksama 1 saniye sonra başlıyor:

enter image description here

ODE15s

Daha sonra ode15ssorunun devam edip etmediğini görmek için simülasyonu çalıştırdım ve hayır, sistem 100 saniye boyunca bile kararlı görünüyor:

enter image description here

Sonra tekrar, ode15ssadece ilk sipariş ve sadece birkaç entegre adım olduğunu unutmayın. Bu yüzden ode15s10 saniye boyunca başka bir simülasyon çalıştırdım, ancak hassasiyeti artırmak için 0.01MaxStep büyüklüğünde ve maalesef bu hem ve hem de aynı sonuca yol açıyor .0.01ode45ode23

enter image description here

Normalde, bu simülasyonların açık sonucu, sistemin hiçbir şey onu rahatsız etmediği için başlangıç ​​konumunda kalmasıdır. Bu ayrışma neden oluyor? Bu tür sistemlerin doğada kaotik olmasıyla bir ilgisi var mı? Bu ode, Matlab'daki işlevler için normal bir davranış mıdır ?


Denklemlerin yanı sıra, şematik bir sorunun da anlaşılması için çok yardımcı olacağını düşünüyorum.
nicoguaro

Bunun uygun olduğunu düşünüyorsanız, cevaplardan birini kabul edebilirsiniz (yeşil bir düğme vardır).
Ertxiem - Monica

Söylemiyorsun, ama çiziyor gibisin x1ve x3. (Efsaneleri veya açıklamaları olmadan grafikler hakkında takın kuru comment.) (Mutlak değerler) ait logaritma komplo deneyin x2ve x4.
Eric Towers

Yanıtlar:


15

Sanırım iki ana nokta zaten Brian ve Ertxiem tarafından yapılmış: başlangıç ​​değeriniz kararsız bir dengedir ve sayısal hesaplamalarınızın hiçbir zaman kesin olmadığı gerçeği, istikrarsızlığı devreye sokacak küçük bir bozulma sağlar.

Bunun nasıl oynandığı hakkında biraz daha ayrıntılı bilgi vermek için, sorununuzu genel bir başlangıç ​​değeri sorunu şeklinde düşünün

y˙(t)=M1f(t,y(t))
y(t)=(x1(t),x2(t),x3(t),x4(t))

f(t,y(t))=[x2V1G1x4V2G2]

f(0,y0)=0y˙(0)=0f~

Kodunuzda, bunu hesaplayarak test edebilirsiniz

norm(rhs(0,[pi/2 0 0 0]))

bu da 6.191e-16'yı verir - yani neredeyse sıfır değildir. Bu sisteminizin dinamiklerini nasıl etkiler?

fy0y~0

Ayrıca, çok kısa bir süre içinde, sisteminizin çözümü doğrusallaştırılmış sistemin çözümü gibi görünür

y˙(t)=f(0,y0)+f(0,y0)(y(t)y0)=f(0,y0)(y(t)y0)

nerede ffrhsy0d(t):=y(t)y0d

d˙(t)=f(0,y0)d(t).

Jacobian'ı elle hesaplamaktan rahatsız olamazdım, bu yüzden iyi bir yaklaşım elde etmek için otomatik farklılaştırmayı kullandım :

J:=f(0,y0)=[01009.8102.4525000012.452502.45250]

böylece denkleminiz

d˙(t)=Jd(t),d(0)=y~0y0

Şimdi son bir adıma ihtiyacımız var: Jacobian'ın bir özdeğer ayrışmasını hesaplayabiliriz ki

J=QDQ1

DJQde(t):=Q1d(t)

e˙(t)=De(t),e(0)=Q1d0.

D

e˙i(t)=λiei(t),ei(0)=ith component of Q1d0

i=1,2,3,4λ1=3.2485

e1(t)=e1(0)e3.2485t.

d(0)=0e(0)=Q1d(0)=0e1(0)=0e1(0)


16

π/2π/2


4
Durum değişkenlerini dikkatlice izlerseniz (bilimsel gösterimde yazdırılan değerlere bakarak), ilk çok yavaş hareketi dengeden uzakta görebilmelisiniz.
Brian Borchers

Bu mantıklı ve gerçekten de, sistemi aşağı dikey konumda başlattığımda (sabit bir denge noktası olarak), sistem hiç hareket etmiyor, en azından çok uzun bir süre düşündüğüm 1000 saniyelik bir simülasyon için .
jrojasqu

6
x1 dikey eksene göre açı olacak şekilde değiştirin. Sonra denklemlerde sen hesaplamak gerekir sin(0)ve cos(0)yerine, hangi kesin vardır sin(pi/2)ve cos(pi/2). Bu şekilde bence bunu garanti edebilirsiniz rhs(t,[0,0,0 0] == [0,0,0,0], bu da sisteminizin hiç hareket etmeyeceği anlamına gelir.
Federico Poloni

@jrojasqu sadece söylenenleri açıkça belirtmek için: değişkenleriniz yalnızca sonlu bir sayı kümesini temsil edebilen çift kesinlikli kayan noktalı sayılarla temsil edilir ve π/2

1
θ=0 1016

4

Fonksiyonlarınızda hesaplanan kuvvetlerin bileşenlerine bakın.

π

Sonunda, minik kuvvetler 10-16 başlangıçta) sistemi dengesiz denge konumundan uzaklaştıracaktır.

Sistemin yer değiştirmesi hala çok küçük olsa da, yuvarlama hataları nedeniyle tüm hesaplamalar çok fazla hassasiyet kaybedecektir (buna benzer hesaplamalar yapıyorsunuz) bir=1.0; bir=bir+10-16) böylece sistemin simülasyonda "devrilmesi" için geçen süre, tam olarak hangi entegrasyon yöntemini kullandığınıza, hangi zaman adımlarını istediğinize vb. bağlıdır.


4

İlk varsayım, başlangıç ​​pozisyonunun sıfır kinetik enerjiyle dengeli bir dengede (yani potansiyel enerjinin minimum değeri) olması ve sistemin dengeden uzaklaşmaya başlamasıydı.
Fiziksel olarak gerçekleşemeyeceği için (klasik mekaniği düşünürsek), aklıma iki şey geldi:

  1. Birincisi belki de başlangıç ​​pozisyonu: her iki sarkaç yukarı dönük (π/2 onun yerine -π/2?) dengesiz bir denge noktasıdır;

  2. İkincisi, belki de hareket denklemlerinde (belki de bir yerlerde bir yazım hatası) yanlış bir şey olmasıdır. Denklemleri açıkça yazabilir misiniz? Belki de açısal ivmeyi, garip bir şey olup olmadığını kontrol etmek için sıfır açısal hız varsayarak, her sarkaçın başlangıç ​​pozisyonunun bir fonksiyonu olarak çizebilirsiniz.


1
Gerçekten de sistemi yukarı dikey konumda başlattım. Bu nedenle, dengesiz bir denge noktasıdır. Brian Borcher'ın yorumu, sorunu açıklayarak cevabınızı tamamlıyorπnihayetinde bu pozisyondan hareket etmesine yol açan yaklaşım.
jrojasqu

2
Bu arada, sadece eğlence için, sistemi dengesiz dikey konumda tutmak istiyorsanız, açısın yukarı doğru sıfıra eşit olması için koordinatların kökenini değiştirebilirsiniz.
Ertxiem - Monica

@Ertxiem başka bir seçenek, sayısal hatalar yiyebilecek pimlere küçük sürtünmeyi tanıtmaktır.
svavil

@Ertxiem Eğlenmek için, koordinat sistemini değiştirmeye çalıştım, böylece sıfır açısı sistemi yukarı doğru gösteriyor. Bu gerçekten en iyi parametrelendirmedir. Açıkçası, sistem süresiz olarak yukarı konumda kalır. Bununla birlikte, kararlı denge konumunda (aşağı doğru) salınımlar hala (1000 saniyelik simülasyon için minimum ama orada) ortaya çıkar, çünkü o zaman,günah(π)potansiyel enerjiden elde edilen kuvvette hesaplanacaktır. Bu yüzden, eğer yeterince uzun süre simüle edersem, sistemin de bu konumdan sapmaya başlayacağı konusunda ısrar ediyorum.
jrojasqu

Fiziksel olarak gerçekleşemeyeceği için - Dengesiz bir dengede olduğumuza bakıldığında, buna biraz meydan okuyorum. Fiziksel sistemler (çok fazla sürtünme olmadan) dengesiz dengede kalmazlar. Daha genel olarak, gerçek sistemleri simüle ederseniz, yanlışlıkla dengesiz bir dengede sıkışmasını önlemek istersiniz (ancak oraya varır) - bu bir özellik, bir hata değil. (İmmünolojideki enfekte olmamış durum gibi, korunabilen dengesiz bir denge gibi bazı nadir istisnalar vardır.)
Wrzlprmft

0

Çift sarkaçlar hakkında daha fazla arama yapmalısınız: "kaotik sistemler" dediğimiz şey bunlar. Basit kurallara göre hareket etseler de, biraz farklı başlangıç ​​koşullarından başlayarak, çözümler oldukça hızlı ayrılır. Bu tür sistemler için sayısal simülasyonlar yapmak kolay değildir. Sorun hakkında daha fazla bilgi edinmek için aşağıdaki videoya göz atın .

Basit veya çift sarkaç için, sistemin toplam enerjisi için bir formül yazabilirsiniz. Sürtünme kuvvetlerinin ihmal edildiği varsayılarak, bu toplam enerji analitik sistem tarafından korunur. Sayısal olarak bu başka bir konudur.

Çift sarkaç denemeden önce basit sarkaç deneyin. Runge-Kutta küçük sipariş yöntemleri için, sabit enerjinin yerine, sayısal enerjilerde sistemin enerjisinin büyüyeceğini göreceksiniz (simülasyonlarınızda olan budur: hiçbir şeyden hareket elde edersiniz). Bunu önlemek için daha yüksek mertebeden RK yöntemleri kullanılabilir (ode45 4. mertebedir; 8. mertebeden RK daha iyi çalışır). Sayısal simülasyonlar enerjiyi koruyacak şekilde tasarlanan "sezgisel yöntemler" olarak adlandırılan başka yöntemler de vardır. Genel olarak, başlatmaya kıyasla enerji önemli ölçüde arttığında simülasyonu durdurmalısınız.

Ve çifte gitmeden önce basit sarkaçları anlamaya çalışın.


2
Ancak bu, sistemin kaotik olması meselesi değildir. Kaotik olmayan sistemlerde de dengesiz bir dengeye sahip olabilirsiniz, örneğin, tek sarkaç "kafasında" olmaktır ve soruda açıklanan aynı davranışı sergileyecektir.
Daniel

1
Küçük düzenin RKM'si için enerjinin arttığı da doğru değildir: örtük Euler ilk düzendir ve tam tersi bir davranış gösterir.
Daniel

@BeniBogosel Dikkatimi çeken sezgisel yöntemlerden bahsediyorsunuz, çünkü benim örneğimde enerji korunmuyor. Ancak, burada uygulanabilecek belirli bir sempatik yöntemi belirtebilir misiniz?
jrojasqu

@jrojasqu neden sisteminizde enerjinin korunmadığını söylüyorsunuz?
Ertxiem - Monica

@Ertxiem When I calculate the total Mechanical Energy of the system (Kinetic+Potential energies) with the outputs provided by ode45, I get a value that starts with zero, then grows with time. The value is very very small at the first seconds, but still, it consistently grows away from zero. I believe it is because of the issues that were addressed in the answers above (approximation of π, etc.).
jrojasqu
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.