ฉันต้องการจำลองพฤติกรรมของระบบลูกตุ้มแบบสองเท่า ระบบนี้เป็นหุ่นยนต์หุ่นยนต์ 2 องศาอิสระที่ไม่ได้ถูกกระตุ้นและจะทำตัวเป็นเหมือนลูกตุ้มสองเท่าที่ได้รับผลกระทบจากแรงโน้มถ่วง ข้อแตกต่างที่สำคัญเพียงอย่างเดียวกับลูกตุ้มคู่คือประกอบด้วยวัตถุแข็งสองตัวที่มีคุณสมบัติมวลและความเฉื่อยที่จุดศูนย์กลางมวล
โดยทั่วไปฉันตั้งโปรแกรมode45
ภายใต้ Matlab เพื่อแก้ปัญหาระบบ ODE ของประเภทต่อไปนี้:
โดยที่คือมุมของร่างกายแรกที่เกี่ยวกับแนวนอนคือความเร็วเชิงมุมของร่างกายแรก คือมุมของร่างกายที่สองที่เกี่ยวกับร่างกายแรกและคือความเร็วเชิงมุมของร่างกายที่สอง สัมประสิทธิ์ทั้งหมดมีการระบุไว้ในรหัสต่อไปนี้ใน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
สังเกตุว่าฉันตั้งเงื่อนไขเริ่มต้นของ (มุมของร่างกายแรกที่เกี่ยวกับแนวนอน) เพื่อให้ระบบเริ่มต้นในแนวตั้งอย่างสมบูรณ์ ด้วยวิธีนี้เนื่องจากแรงโน้มถ่วงเท่านั้นที่ทำหน้าที่ผลลัพธ์ที่ชัดเจนคือระบบไม่ควรเคลื่อนที่จากตำแหน่งนั้น
หมายเหตุ: ในกราฟิกด้านล่างทั้งหมดฉันได้วางแผนการแก้ปัญหาและตามเวลา
ode45
เมื่อฉันรันการจำลองเป็นเวลา 6 วินาทีด้วยode45
ฉันจะได้รับโซลูชันที่คาดหวังโดยไม่มีปัญหาเลยระบบยังคงอยู่ที่เดิมและไม่เคลื่อนที่:
อย่างไรก็ตามเมื่อฉันรันการจำลองเป็นเวลา 10 วินาทีระบบจะเริ่มเคลื่อนไหวอย่างไม่มีเหตุผล:
ODE23
จากนั้นฉันก็ทำการจำลองด้วยode23
เพื่อดูว่าปัญหายังคงอยู่หรือไม่ ฉันจบลงด้วยพฤติกรรมที่เหมือนกันเฉพาะเวลานี้ความแตกต่างเริ่มต้นที่ 1 วินาทีต่อมา:
ODE15s
จากนั้นฉันก็ทำการจำลองด้วยode15s
เพื่อดูว่าปัญหายังคงอยู่หรือไม่ระบบดูเหมือนจะเสถียรแม้ในช่วง 100 วินาที:
จากนั้นอีกครั้ง ode15s
ode15s
MaxStep
ode45
ode23
โดยปกติแล้วผลลัพธ์ที่ชัดเจนของการจำลองเหล่านี้ก็คือระบบจะอยู่ที่ตำแหน่งเริ่มต้นเนื่องจากไม่มีสิ่งใดรบกวนระบบดังกล่าว ทำไมความแตกต่างนี้จึงเกิดขึ้น มันมีบางอย่างเกี่ยวกับความจริงที่ว่าระบบประเภทนี้มีความวุ่นวายในธรรมชาติหรือไม่? นี่เป็นพฤติกรรมปกติของode
ฟังก์ชั่นใน Matlab หรือไม่?
x1
x3
(แสดงความคิดเห็นเกี่ยวกับการแทรกแห้งโดยไม่ต้องกราฟตำนานหรือคำอธิบาย.) ลองวางแผนลอการิทึมของ (ค่าแน่นอนของ) และx2
x4