Определение условия нестабильности системы с 2 степенями свободы
| > | restart; | 
Процедура дифференцирования по t любого порядка
| > | Dif:=proc(x,i) if i=0 then x else diff(x,t$i) fi end: ------------------------------------------------------------------------------------------ | 
Процедура дифференцирования кинетической энергии по переменной z
| > | DL:=proc(T,z) subs(xx=z,diff(subs(z=xx,T),xx));end: | 
    -------------------------------------------------------------------------------------------     
  with(LinearAlgebra):   x1:=X(t):x2:=Y(t):
with(PDEtools,declare):with(plots):declare(x1,x2):
   Процедура получения i-го уравнения  Лагранжа 2-го рода 
   (кинетическая энергия T, обобщенные координаты x1,x2, обобщенные силы Q)  
| > | Lagr2:=proc(T,Q,i) simplify(diff(DL(T,diff(x||i,t)),t)-DL(T,x||i))-Q: end: ------------------------------------------------------------------------------------------- | 
Warning, the name changecoords has been redefined
 
 
Процедура нахождения условия нестабильности с подстановкой ускорений (xtt,ytt) из уравнений движения
| > | NC:=proc(M) local A,i,j,Dtr; | 
| > | A:=Matrix(2): | 
| > | for i to 2 do | 
| > | for j to 2 do | 
| > | A[i,j]:=subs(xx=Dif(x||j,M),diff(subs(Dif(x||j,M)=xx,eq[i]),xx)); | 
| > | od: | 
| > | od: | 
Dtr:=simplify(Determinant(A));
collect(numer(simplify(subs({diff(x1,t$2)=xtt,diff(x2,t$2)=ytt},Dtr))),X(t));
| > | end proc: ------------------------------------------------------------------------------------------- | 
Константы задачи
| > | mu1:=10: mu2:=10: m1:=3: | 
| > | m2,m3,m4,R:=1$4: | 
| > | I1:=m1*R^2/2: | 
| > | a:=R^2*(m2+3/8*m3): | 
| > | B:=m4+3/8*m3: | 
| > | C:=3/8*R*m3: | 
| > | F:=B/2: | 
| > | G:=C*sin(x2): | 
| > | H:=(I1+a*sin(x2)^2)/2: | 
| > | с,M0:=100$2: | 
Кинетическая энергия
| > | T:=diff(x1,t)^2*F+diff(x1,t)*diff(x2,t)*G+diff(x2,t)^2*H: | 
Обобщенные силы
| > | Q1:=-с*x1-mu1*diff(x1,t): Q2:=M0-mu2*x2*diff(x2,t): | 
Исследуемая система уравнения в форме Лагранжа
| > | for i to 2 do eq[i]:=Lagr2(T,Q||i,i) od: | 
Решение системы дифференциальных уравнений
| > | sol:=dsolve({eq[1],eq[2],X(0)=0,D(X)(0)=0, Y(0)=0,D(Y)(0)=1},{X(t),Y(t)},type=numeric,output=listprocedure): | 
Построение графиков
| > | opt:=0..5,numpoints=500,thickness=2,title=cat("mu2=",convert(mu2,string)): | 
| > | s1:=odeplot(sol,[t,diff(x1,t)],opt,color=black,legend=["Скорость тележки v1"]): | 
| > | s2:=odeplot(sol,[t,diff(x2,t)],opt,color=green,legend=["Угловая скорость маховика v2"]): | 
| > | s3:=odeplot(sol,[t,X(t)],opt,color=blue,legend=["Координата x"]): | 
| > | s4:=odeplot(sol,[t,Y(t)],opt,color=red,legend=["Угол Fi"]): | 
| > | display(s1,s2,s3,s4); | 
Выражение ускорений из уравнений движения
| > | EQ:=subs(diff(x1,t$2)=xtt,diff(x2,t$2)=ytt,{eq[1],eq[2]}): | 
| > | assign(solve(EQ,{xtt,ytt})); | 
![[Maple Plot]](evol/stabkul3.gif) 
| > | odeplot(sol,[t,NC(0)],opt,color=red,legend=["1/2"]); | 
![[Maple Plot]](evol/stabkul4.gif) 
| > | odeplot(sol,[t,NC(1)],opt,color=magenta,legend=["0/2"]); | 
![[Maple Plot]](evol/stabkul5.gif)