Saya ingin mensimulasikan perilaku sistem seperti pendulum ganda. Sistem ini adalah manipulator robot 2 derajat kebebasan yang tidak digerakkan dan oleh karena itu, akan berperilaku seperti pendulum ganda yang dipengaruhi oleh gravitasi. Satu-satunya perbedaan utama dengan pendulum ganda adalah bahwa ia terdiri dari dua benda kaku dengan massa dan sifat inersia di pusat massa mereka.
Pada dasarnya, saya memprogram di ode45
bawah Matlab untuk memecahkan sistem ODE dari jenis berikut:
di mana adalah sudut tubuh pertama sehubungan dengan horizontal, adalah kecepatan sudut tubuh pertama; adalah sudut tubuh kedua sehubungan dengan tubuh pertama, dan adalah kecepatan sudut tubuh kedua. Semua koefisien ditentukan dalam kode berikut, dalam rhs
dan fMass
fungsi yang saya buat.
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
Perhatikan bagaimana saya mengatur kondisi awal (sudut tubuh pertama sehubungan dengan horizontal) sehingga sistem mulai dalam posisi yang sepenuhnya vertikal. Dengan cara ini, karena hanya gravitasi yang bertindak, hasil yang jelas adalah bahwa sistem tidak boleh bergerak sama sekali dari posisi itu.
CATATAN: dalam semua grafik di bawah ini, saya merencanakan solusi dan sehubungan dengan waktu.
ODE45
Ketika saya menjalankan simulasi selama 6 detik ode45
, saya mendapatkan solusi yang diharapkan tanpa masalah sama sekali, sistem tetap berada di tempatnya dan tidak bergerak:
Namun, ketika saya menjalankan simulasi selama 10 detik, sistem mulai bergerak secara tidak masuk akal:
ODE23
Saya kemudian menjalankan simulasi ode23
untuk melihat apakah masalah tetap ada. Saya berakhir dengan perilaku yang sama, hanya kali ini perbedaan dimulai 1 detik kemudian:
ODE15s
Saya kemudian menjalankan simulasi dengan ode15s
untuk melihat apakah masalah tetap ada dan tidak, sistem tampaknya stabil bahkan selama 100 detik:
Kemudian lagi, ode15s
hanya urutan pertama dan perhatikan bahwa hanya ada beberapa langkah mengintegrasikan. Jadi saya menjalankan simulasi lain dengan ode15s
selama 10 detik tetapi MaxStep
ukuran untuk meningkatkan presisi, dan sayangnya, ini mengarah ke hasil yang sama dengan keduanyaode45
danode23
.
Biasanya, hasil nyata dari simulasi ini adalah bahwa sistem tetap pada posisi awalnya karena tidak ada yang mengganggu itu. Mengapa perbedaan ini terjadi? Apakah itu ada hubungannya dengan fakta bahwa jenis sistem ini pada dasarnya kacau? Apakah ini perilaku normal untuk ode
fungsi di Matlab?
x1
dan x3
. (Masukkan komentar kering tentang grafik tanpa legenda atau deskripsi.) Cobalah merencanakan logaritma (nilai absolut dari) x2
dan x4
.