एक ODE का संख्यात्मक समाधान अस्थिर संतुलन से दूर क्यों जाता है?


15

मैं एक डबल-पेंडुलम जैसी प्रणाली के व्यवहार का अनुकरण करना चाहता हूं। प्रणाली एक 2-डिग्री-ऑफ-फ्रीडम रोबोट मैनिपुलेटर है जिसे सक्रिय नहीं किया जाता है और इसलिए, गुरुत्वाकर्षण से प्रभावित एक डबल-पेंडुलम की तरह व्यवहार करते हैं। एक डबल-पेंडुलम के साथ एकमात्र मुख्य अंतर यह है कि यह द्रव्यमान के दो केंद्रों में द्रव्यमान और जड़ता गुणों के साथ दो कठोर निकायों से बना है।

मूल रूप से, मैंने ode45निम्न प्रकार के ODEs की एक प्रणाली को हल करने के लिए मतलाब के तहत प्रोग्राम किया:

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

जहाँ x1 क्षैतिज के संबंध में पहले शरीर का कोण है, x2 पहले शरीर का कोणीय वेग है; x3 पहले शरीर के संबंध में दूसरे शरीर का कोण है, और एक्स4 दूसरे शरीर का कोणीय वेग है। सभी गुणांक निम्नलिखित कोड में rhsऔर fMassमेरे द्वारा बनाए गए कार्यों में निर्दिष्ट हैं ।

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

ध्यान दें कि मैंने x1 की प्रारंभिक स्थिति कैसे निर्धारित की है (क्षैतिज के संबंध में पहले शरीर का कोण) ताकि सिस्टम पूरी तरह से ऊर्ध्वाधर स्थिति में शुरू हो। इस तरह, चूंकि केवल गुरुत्वाकर्षण ही कार्य कर रहा है, इसलिए स्पष्ट परिणाम यह है कि सिस्टम को उस स्थिति से बिल्कुल भी नहीं हटना चाहिए।

नोट: नीचे दिए गए सभी ग्राफिक्स में, मैंने समय के संबंध में समाधान x1 और x3 को प्लॉट किया ।

ODE45

जब मैं 6 सेकंड के लिए सिमुलेशन चलाता हूं ode45, तो मुझे बिना किसी समस्या के अपेक्षित समाधान मिलता है, सिस्टम जहां रहता है, वहीं रुकता है:

यहां छवि विवरण दर्ज करें

हालाँकि, जब मैं 10 सेकंड के लिए सिमुलेशन चलाता हूं, तो सिस्टम अनुचित रूप से चलना शुरू कर देता है:

यहां छवि विवरण दर्ज करें

ODE23

मैंने इसके बाद सिमुलेशन चलाया कि ode23क्या समस्या बनी रहती है। मैं उसी व्यवहार के साथ समाप्त होता हूं, केवल इस बार विचलन 1 सेकंड बाद शुरू होता है:

यहां छवि विवरण दर्ज करें

ODE15s

मैंने इसके बाद सिमुलेशन चलाया कि ode15sक्या समस्या बनी रहती है और नहीं, यह प्रणाली 100 सेकंड के दौरान भी स्थिर प्रतीत होती है:

यहां छवि विवरण दर्ज करें

ode15sode15sMaxStep0.01ode45ode23

यहां छवि विवरण दर्ज करें

आम तौर पर, इन सिमुलेशन का स्पष्ट परिणाम यह होगा कि सिस्टम अपनी प्रारंभिक स्थिति पर रहता है क्योंकि कुछ भी इसे खराब नहीं कर रहा है। यह विचलन क्यों हो रहा है? क्या इसका इस तथ्य से कोई लेना-देना है कि इस प्रकार की प्रणालियाँ प्रकृति में अराजक हैं? क्या odeमतलाब में कार्यों के लिए यह एक सामान्य व्यवहार है ?


समीकरणों के अलावा, मुझे लगता है कि योजनाबद्ध भी प्रश्न को समझने में बहुत मदद करेगा।
nicoguaro

यदि आपको लगता है कि यह उचित है, तो आप उत्तर में से एक को स्वीकार कर सकते हैं (एक हरा बटन है)।
एर्टिसेम - मोनिका

आप नहीं कहते हैं, लेकिन आप साजिश रचने लगते हैं x1और x3। (किंवदंतियों या विवरण के बिना रेखांकन के बारे में सूखी टिप्पणी डालें।) (के निरपेक्ष मूल्यों) x2और के लघुगणक की साजिश रचने का प्रयास करें x4
एरिक टॉवर्स ने

जवाबों:


15

मुझे लगता है कि ब्रायन और एर्टिसेम द्वारा पहले से ही दो मुख्य बिंदु बनाए गए हैं: आपका प्रारंभिक मूल्य एक अस्थिर संतुलन है और यह तथ्य कि आपके संख्यात्मक अभिकलन कभी भी सटीक नहीं होते हैं वास्तव में छोटे गड़बड़ी प्रदान करता है जो अस्थिरता को किक करेगा।

थोड़ा और विस्तार देने के लिए कि यह कैसे चलता है, अपनी समस्या को सामान्य प्रारंभिक मूल्य समस्या के रूप में समझें

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~

अपने कोड में, आप यह गणना कर सकते हैं कि कंप्यूटिंग द्वारा

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

जो ६.१ ९ १ -१६ देता है - इतना लगभग लेकिन बिल्कुल शून्य नहीं। यह आपके सिस्टम की गतिशीलता को कैसे प्रभावित करता है?

fy0y~0

इसके अलावा, बहुत कम समय में, आपके सिस्टम का समाधान रैखिककृत प्रणाली के समाधान जैसा दिखता है

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

ffrhsy0d(t):=y(t)y0d

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

मुझे हाथ से जैकबियन की गणना करने के लिए परेशान नहीं किया जा सकता है इसलिए मैंने एक अच्छा सन्निकटन प्राप्त करने के लिए स्वचालित भेदभाव का उपयोग किया :

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

ताकि आपका समीकरण बन जाए

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

अब हमें एक अंतिम चरण की आवश्यकता है: हम इस तरह के जैकोबिन के एक स्वदेशी अपघटन की गणना कर सकते हैं

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
यदि आप राज्य चर की सावधानीपूर्वक निगरानी करते हैं (वैज्ञानिक संकेतन में मुद्रित मूल्यों को देखकर), तो आपको प्रारंभिक बहुत धीमी गति से संतुलन से दूर देखने में सक्षम होना चाहिए।
ब्रायन बोरचर्स

यह समझ में आता है और वास्तव में, जब मैं सिस्टम को नीचे की ओर ऊर्ध्वाधर स्थिति में शुरू करता हूं (स्थिर संतुलन का एक बिंदु होता है), तो सिस्टम बिल्कुल भी नहीं हिलता है, कम से कम 1000 सेकंड के सिमुलेशन के लिए जिसे मैं बहुत लंबी अवधि मानता हूं ।
जार्जसुक्

6
x1sin(0)cos(0)sin(pi/2)cos(pi/2)rhs(t,[0,0,0 0] == [0,0,0,0]

π/2

1
θ=0 1016

4

अपने कार्यों में गणना की गई ताकतों के घटकों को देखें।

π

1016

a=1.0a=a+1016


4

प्रारंभिक धारणा थी कि प्रारंभिक स्थिति एक स्थिर संतुलन (यानी, संभावित ऊर्जा का एक न्यूनतम) शून्य गतिज ऊर्जा के साथ थी और प्रणाली संतुलन से दूर जाने लगी।
चूंकि शारीरिक रूप से ऐसा नहीं हो सकता (यदि हम शास्त्रीय यांत्रिकी पर विचार करें), तो दो बातें मेरे दिमाग में आईं:

  1. π/2π/2

  2. दूसरा यह है कि शायद आंदोलन के समीकरणों में कुछ गड़बड़ है (शायद एक टाइपो कहीं?)। क्या आप स्पष्ट रूप से समीकरण लिख सकते हैं? शायद आप प्रत्येक पेंडुलम की प्रारंभिक स्थिति के एक समारोह के रूप में कोणीय त्वरण की साजिश कर सकते हैं, यह मानने के लिए कि क्या कुछ अजीब है, शून्य कोणीय वेग मान लें।


1
वास्तव में, मैंने सिस्टम को एक ऊर्ध्व ऊर्ध्वाधर स्थिति में शुरू किया। इसलिए, यह अस्थिर संतुलन का एक बिंदु है। ब्रायन बोरचर की टिप्पणी ने इस मुद्दे को समझाते हुए आपके उत्तर को पूरा कियाπसन्निकटन जो सिस्टम को अंततः उस स्थिति से आगे बढ़ाता है।
जोजसक्क्

2
वैसे, सिर्फ मनोरंजन के लिए, यदि आप सिस्टम को अस्थिर ऊर्ध्वाधर स्थिति में रखना चाहते थे, तो आप अपने निर्देशांक की उत्पत्ति को बदल सकते हैं ताकि कोण ऊपर की ओर शून्य के बराबर हो।
एर्टिसेम - मोनिका

@Ertxiem एक अन्य विकल्प उन पिनों में छोटे घर्षण को पेश करना है जो संख्यात्मक त्रुटियों को खाएंगे।
svavil

@Ertxiem मनोरंजन के लिए, मैंने समन्वय प्रणाली को बदलने की कोशिश की ताकि शून्य कोण प्रणाली को ऊपर की ओर इंगित करे। यह वास्तव में यहाँ सबसे अच्छा पैरामीटर है। जाहिर है कि सिस्टम अनिश्चित काल तक ऊपर की स्थिति में रहता है। हालांकि दोलन अभी भी उत्पन्न होते हैं (अनुकरण के 1000 सेकंड के लिए कम से कम) लेकिन स्थिर संतुलन की स्थिति में (सीधे नीचे की ओर) क्योंकि तब, एक हैपाप(π)संभावित ऊर्जा से प्राप्त बल में गणना की जाएगी। इसलिए मैं इस तथ्य पर जोर देता हूं कि अगर मैं इसे लंबे समय तक अनुकरण करता हूं, तो सिस्टम उस स्थिति से भी भटकना शुरू कर देगा।

चूंकि शारीरिक रूप से ऐसा नहीं हो सकता है - इस अंतर्दृष्टि को देखते हुए कि हम एक अस्थिर संतुलन पर हैं, मैं कुछ हद तक इसे चुनौती देता हूं। शारीरिक प्रणाली (बहुत अधिक घर्षण के बिना) अस्थिर संतुलन में नहीं रहती है। आम तौर पर, यदि आप वास्तविक प्रणालियों का अनुकरण करते हैं, तो आप बचना चाहेंगे कि यह गलती से एक अस्थिर संतुलन में फंस जाता है (हालांकि यह वहां मिल गया) - यह एक विशेषता है, बग नहीं। (इसके लिए कुछ दुर्लभ अपवाद हैं, जैसे कि प्रतिरक्षा विज्ञान में असंक्रमित राज्य, जो एक अस्थिर संतुलन है जिसे बनाए रखा जा सकता है।)
Wrzlprmft

0

आपको डबल पेंडुलम के बारे में अधिक खोज करनी चाहिए: वे हैं जिन्हें हम "अराजक प्रणाली" कहते हैं। भले ही वे सरल नियमों का पालन करते हैं, लेकिन थोड़ा अलग प्रारंभिक परिस्थितियों से शुरू होता है, समाधान काफी तेज होता है। इस तरह के सिस्टम के लिए संख्यात्मक सिमुलेशन करना आसान नहीं है। समस्या पर अधिक जानकारी प्राप्त करने के लिए निम्नलिखित वीडियो पर एक नज़र डालें ।

सरल या डबल पेंडुलम के लिए आप सिस्टम की कुल ऊर्जा के लिए एक सूत्र लिख सकते हैं। यह मानते हुए कि घर्षण बल उपेक्षित हैं, यह कुल ऊर्जा विश्लेषणात्मक प्रणाली द्वारा संरक्षित है। संख्यात्मक रूप से यह एक पूरी अन्य समस्या है।

डबल पेंडुलम की कोशिश करने से पहले, सरल पेंडुलम का प्रयास करें। आप देखेंगे कि रन-कुट्टा तरीकों के लिए छोटे क्रम के सिस्टम की ऊर्जा शेष स्थिर के बजाय संख्यात्मक सिमुलेशन में बढ़ेगी (यह वही है जो आपके सिमुलेशन में होता है: आपको कुछ भी नहीं मिलता है)। इसे रोकने के लिए, उच्च क्रम RK विधियों का उपयोग किया जा सकता है (ode45 क्रम 4 का है; क्रम 8 का RK बेहतर काम करेगा)। "सिम्पलेक्टिक मेथड्स" नामक अन्य विधियाँ हैं जिन्हें इस तरह से डिज़ाइन किया गया है कि संख्यात्मक सिमुलेशन ऊर्जा का संरक्षण करते हैं। सामान्य तौर पर आपको अपने इनिशियलाइज़ेशन की तुलना में ऊर्जा के बढ़ते ही सिमुलेशन को रोक देना चाहिए।

और डबल पे जाने से पहले सरल पेंडुलम को समझने की कोशिश करें।


2
हालाँकि यह व्यवस्था के अराजक होने की बात नहीं है। आपके पास गैर-अराजक प्रणालियों में एक अस्थिर संतुलन हो सकता है, जैसे कि एकल पेंडुलम "उसके सिर पर", और यह प्रश्न में वर्णित समान व्यवहार को प्रदर्शित करेगा।
डैनियल

1
यह भी सच नहीं है कि छोटे क्रम के आरकेएम के लिए ऊर्जा बढ़ जाती है: निहित यूलर प्रथम आदेश है और बिल्कुल विपरीत व्यवहार दिखाता है।
डैनियल

@BeniBogosel आप सहानुभूति विधियों का उल्लेख करते हैं जिन्होंने मेरा ध्यान आकर्षित किया क्योंकि जाहिर है, मेरे उदाहरण में, ऊर्जा संरक्षित नहीं है। हालाँकि, क्या आप एक विशिष्ट सहानुभूति विधि का संकेत दे सकते हैं जिसे यहां लागू किया जा सकता है?
jrojasqu

@jrojasqu आप यह क्यों कहते हैं कि ऊर्जा आपके सिस्टम पर संरक्षित नहीं है?
एर्टिसेम - मोनिका

@Ertxiem जब मैं सिस्टम की कुल यांत्रिक ऊर्जा (काइनेटिक + संभावित ऊर्जा) की गणना करता ode45हूं, तो प्रदान किए गए आउटपुट के साथ , मुझे एक मूल्य मिलता है जो शून्य से शुरू होता है, फिर समय के साथ बढ़ता है। मान पहले सेकंड में बहुत छोटा है, लेकिन फिर भी, यह लगातार शून्य से दूर होता है। मेरा मानना ​​है कि यह उन मुद्दों के कारण है जो ऊपर दिए गए जवाबों में दिए गए थे (का अनुमान हैπ, आदि।)।
२२:२१
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.