Чому чисельний розчин ОДЕ відходить від нестабільної рівноваги?


15

Я хочу імітувати поведінку системи, що нагадує подвійний маятник. Система - це маніпулятор-робот 2 ступеня свободи, який не спрацьовує, і, отже, буде вести себе, як подвійне маятник, постраждалий від сили тяжіння. Єдина основна відмінність з подвійним маятником полягає в тому, що він складається з двох жорстких тіл з властивостями маси та інерції в їх центрах маси.

В основному я програмував ode45під Matlab для вирішення системи ODE такого типу:

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

де x1 - кут першого тіла відносно горизонталі, x2 - кутова швидкість першого тіла; x3 - кут другого тіла відносно першого тіла, а x4 - кутова швидкість другого тіла. Всі коефіцієнти вказані в наступному коді, в 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 секунд:

введіть тут опис зображення

Потім знову ode15sлише перший порядок та зауважте, що є лише кілька інтегруючих кроків. Тому я запустив ще одне моделювання ode15sпротягом 10 секунд, але MaxStepрозміром 0.01 для підвищення точності, і, на жаль, це призводить до того ж результату, що і для обох ode45і ode23.

введіть тут опис зображення

Зазвичай очевидним результатом цих симуляцій буде те, що система залишається у вихідному положенні, оскільки ніщо її не турбує. Чому виникає така розбіжність? Чи має щось спільне з тим, що такі типи систем мають хаотичний характер? Це нормальна поведінка для odeфункцій в Matlab?


Крім рівнянь, я думаю, що схема також дуже допоможе зрозуміти питання.
nicoguaro

Якщо ви вважаєте, що це доречно, ви можете прийняти одну з відповідей (є зелена кнопка).
Ertxiem

Ви не кажете, але ви, здається, плануєте x1і x3. (Вставте сухий коментар до графіків без легенд чи описів.) Спробуйте скласти логарифми (абсолютні значення) x2та x4.
Eric Towers

Відповіді:


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]))

що дає 6.191e-16 - так майже, але не точно нульовий. Як це впливає на динаміку вашої системи?

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 секунд, що я вважаю дуже тривалим періодом часу .
jrojasqu

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

π/2

1
θ=0 10-16для парних пар
лама

4

Подивіться на складові сили, обчислені у ваших функціях.

Ви, ймовірно, виявите, що вони ніколи не бувають абсолютно нульовими, оскільки, як говорили інші відповіді, ви не можете представляти значенняπ точно в комп'ютерній арифметиці, і підпрограми, які обчислюють триггерні функції, також не точні.

Врешті-решт, крихітні сили (напевно, порядку) 10-16 на початку) відсуне систему від свого нестабільного положення рівноваги.

Хоча переміщення системи ще дуже мало, всі обчислення втратять велику точність через помилки округлення (ви робите розрахунки, аналогічні а=1,0; а=а+10-16), тож кількість часу до того, як система "перекинеться" в моделюванні, залежатиме від того, який саме метод інтеграції ви використовували, які часові кроки ви вимагали тощо


4

Початкове припущення полягало в тому, що початкове положення знаходилося в стабільній рівновазі (тобто мінімум потенційної енергії) з нульовою кінетичною енергією і система почала віддалятися від рівноваги.
Оскільки фізично це не може статися (якщо розглядати класичну механіку), мені спали на думку дві речі:

  1. Перший полягає в тому, що, можливо, початкове положення таке: обидва маятника спрямовані вгору (π/2 замість -π/2?), що є точкою нестабільної рівноваги;

  2. Другий - це те, що, можливо, щось не так з рівняннями руху (можливо, друкарня десь?). Чи можете ви, будь ласка, записати рівняння прямо? Можливо, ви могли побудувати кутове прискорення як функцію від початкового положення кожного маятника, припускаючи нульову кутову швидкість, щоб перевірити, чи є щось дивне.


1
Дійсно, я запустив систему у вертикальному положенні вгору. Тому це точка нестабільної рівноваги. Коментар Брайана Борчера доповнює вашу відповідь поясненням проблемиπнаближення, яке призводить до того, що система з часом переходить з цього положення.
jrojasqu

2
До речі, просто для розваги, якщо ви хотіли тримати систему у нестабільному вертикальному положенні, ви можете змінити своє походження координат, щоб кут був рівний нулю, спрямований вгору.
Ertxiem

@Ertxiem Інший варіант - ввести невеликі тертя в штифти, які мали б числові помилки.
svavil

@Ertxiem Для задоволення я спробував змінити систему координат, щоб нульовий кут зробив систему вгору. Тут дійсно найкраща параметризація. Очевидно, що система залишається у верхньому положенні нескінченно. Однак коливання все ще виникають (мінімально протягом 1000 секунд моделювання, але там) при стабільному положенні рівноваги (прямо вниз), оскільки тоді існуєгріх(π)підраховується в силу, що випливає з потенційної енергії. Тому я наполягаю на тому, що якщо я моделюю це досить довго, система також почне відхилятися від цієї позиції.
jrojasqu

Оскільки фізично це не може статися - Враховуючи розуміння того, що ми перебуваємо в нестабільній рівновазі, я дещо оскаржую це. Фізичні системи (без занадто сильного тертя) не залишаються в нестабільній рівновазі. Загалом, якщо ви імітуєте реальні системи, ви хочете уникнути, щоб вона випадково застрягла в нестабільній рівновазі (проте вона потрапила туди) - це особливість, а не помилка. (Є кілька рідкісних винятків із цього, наприклад, незаражений стан імунології, який є нестабільною рівновагою, яку можна підтримувати.)
Wrzlprmft

0

Вам слід більше шукати подвійні маятники: вони називаються "хаотичними системами". Незважаючи на те, що вони поводяться за простими правилами, починаючи з трохи інших початкових умов, рішення розходяться досить швидко. Зробити чисельне моделювання для подібних систем непросто. Перегляньте наступне відео, щоб отримати більш глибоке розуміння проблеми.

Для простого або подвійного маятника ви можете написати формулу загальної енергії системи. Якщо припустити, що силами тертя нехтують, ця загальна енергія зберігається аналітичною системою. Числово це зовсім інше питання.

Перш ніж спробувати подвійне маятник, спробуйте просте маятник. Ви помітите, що для методів Runge-Kutta невеликого порядку енергія системи зростатиме в числових моделюваннях, а не залишається постійною (саме це відбувається у ваших моделюваннях: ви отримуєте рух з нічого). Для запобігання цього можна використати методи RK вищого порядку (ode45 - це порядок 4; RK порядку 8 працював би краще). Існують і інші методи, що називаються "симплектичними методами", розробленими таким чином, що чисельне моделювання зберігає енергію. Як правило, ви повинні припинити моделювання, як тільки енергія значно зросте порівняно з вашою ініціалізацією.

І спробуйте зрозуміти простий маятник, перш ніж перейти до подвійного.


2
Це не питання хаотичності системи. Ви можете мати нестабільну рівновагу і в не хаотичних системах, наприклад, одне маятник знаходиться «на голові», і воно проявлятиме ту саму поведінку, яку описано в питанні.
Даніель

1
Не вірно також, що енергія збільшується для РКМ малого порядку: неявний Ейлер першого порядку і показує прямо протилежну поведінку.
Даніель

@BeniBogosel Ви згадуєте симплектичні методи, які привернули мою увагу, оскільки, очевидно, в моєму прикладі енергія не зберігається. Однак ви могли б вказати конкретний симплектичний метод, який можна було б реалізувати тут?
jrojasqu

@jrojasqu, чому ви кажете, що енергія не зберігається у вашій системі?
Ertxiem - відновити Моніку

@Ertxiem Коли я обчислюю загальну механічну енергію системи (кінетична + потенціальна енергія) з поданими виходами ode45, я отримую значення, яке починається з нуля, а потім зростає з часом. На перших секундах значення дуже мало, але все-таки воно постійно зростає від нуля. Я вважаю, що це пов'язано з питаннями, які були вирішені у відповідях вище (наближення доπтощо).
jrojasqu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.