Программа 26. Задача 43
> | restart; |
> | with(PDEtools):declare(x(t),phi(t)): |
Процедура универсального дифференцирования
> | read "C:\\diff.m"; |
Обозначения
> | f:=phi(t): vx:=diff(x(t),t): w:=diff(f,t): |
Массы и момент инерции
> | J3:=m3*r^2/2: |
> | m1:=4*m: m2:=m: m3:=3*m: |
Координаты точки m2
> | x2:=x(t)-r*f+r*cos(f): |
> | y2:=r*sin(f): |
Скорости
> | vx2:=diff(x2,t): |
> | vy2:=diff(y2,t): |
Кинетическая энергия
> | T:=m1*vx^2/2 + m2*(vx2^2+vy2^2)/2 + J3*w^2/2 + m3*(vx-r*w)^2/2: |
Потенциальная энергия
> | P:=M*f+m2*g*y2: |
Функция Лагранжа
> | L:=T-P: |
Обобщенный импульс
> | px:=Дифф(L,vx): |
Обобщенная циклическая скорость
> | X1:=solve(px=C,vx): |
Функция Рауса
> | R:=collect(simplify(C*X1-subs(vx=X1,L)),w,factor); |
Уравнение Рауса
> | Уравн:=simplify(8*(diff(Дифф(R,w),t) - Дифф(R,f))); |
Момент (Нм), масса (кг), ускорение (м/с2), радиус (м)
> | M:=4: m:=2: g:=9.81: r:=1: |
Начальный угол и начальная угл.скорость
> | f0:=-Pi/8: f10:=0: |
> | НачУсл:=phi(0)=f0,D(phi)(0)=f10: |
Решение задачи Коши
> |
> | Sol:=dsolve({Уравн,НачУсл},phi(t),type=numeric,output=operator):assign(Sol): |
> | with(plots):with(plottools): |
> | T2:=7: |
> | Рис1:=odeplot(Sol,[t,f],0..T2,color=blue,thickness=2,legend="phi",numpoints=200): |
> | Рис2:=odeplot(Sol,[t,w],0..T2,color=red,linestyle=3,legend="omega",numpoints=200): |
> | X_:=int(diff(R,C),t)+C2; |
Определяем константы из нулевых начальных условий для х
> | eq1:=simplify(subs(f=f0,t=0,X_))=0: |
> | eq2:=subs(f=f0,w=f10,diff(R,C)): |
> | Решение:=solve({eq1,eq2},{C,C2}); |
> | assign(Решение); |
> | Рис3:=plot(X_,t=0..T2,color=black,legend="x"): |
> | display(Рис1,Рис2,Рис3); |
Warning, cannot evaluate the solution past the initial point, problem may be complex, initially singular or improperly set up
Warning, cannot evaluate the solution past the initial point, problem may be complex, initially singular or improperly set up
> | a:=4: b:=0.2: # Размеры бруска |
> | ЧислоКадров:=48: |
> | Шаг:=4.8/ЧислоКадров: |
> | for k to ЧислоКадров do |
> | t:=k*Шаг: |
> | F:=phi(t): |
> | x0:=evalf(X_): |
> | Цилиндр:=circle([x0-r*F,r+b],r,color=red): |
> | Брусок:=POLYGONS([[x0,b],[x0,0],[x0+a,0],[x0+a,b]]),STYLE(PATCH),COLOR(HUE,0.7): |
> | Точка:=POINTS([x0-r*F+r*cos(F),r+r*sin(F)+b],SYMBOL(CIRCLE),COLOR(RGB,0,0,1)): |
> | Кадр[k]:=PLOT(Цилиндр,Брусок,Точка): |
> | od: |
> | display(seq(Кадр[i],i=1..ЧислоКадров),insequence=true,scaling=constrained); |
> |
> |
> |
> |