Задачу саму решил, но с процедурой колебаний я не понимаю, осталась надежда только на вас=) Смысл в чем, надо что бы конечный брусок раскачивался все сильнее и сильнее.
> restart; > > de := mD*(diff(x(t), `$`(t, 2))) = -G[D]*sin(alpha)+P; > P := -c*(x(t)-f[stD]-xi); > de; > st1:=-G[D]*sin(alpha)+c*f[stD]=0; > f[stD]:='f[stD]':f[stD]:=solve(st1,f[stD]); > de:=expand(simplify(de)); > sol:=dsolve({de,x(0)=-G[E]*sin(alpha)/c,D(x)(0)=0},x(t)); > alpha:=Pi/6;xi:=0.2*sin(10*t);g:=9.81;c:=600;mD:=2;G[D]:=mD*g;mE:=10;G[E]:=mE*g; > plot(rhs(sol),t=0..5,color=blue); > > body:=proc(x) > plottools[rotate](plottools[rectangle]([x-0.25,1],[x+0.5,0],color=gray),alpha,[0,0]); > end: > strin:=proc(x,x1) > local str,delt,points; > delt:=abs(x-x1)/13; > points:=plot([[x,0],[x,1],[x,0.5],seq([x+delt/2+delt*i,0.5+(-1)^i*0.2],i=0..12),[x+delt*13,0.5]],color=black,thickness=2,scaling=constrained); > points:=plottools[rotate](points,alpha,[0,0]); > end: > pdif:=proc(eq,T) > local l1,rec,i,dt,cadr,ps,pb,TT; > cadr:=T*10; > l1:=plot({0,tan(alpha)*x},x=0..6,thickness=3,color=black,axes=NONE); > ps:=plottools[rotate](plot([[1,0],[1,1]],color=black),alpha,[0,0]); > pb:=plottools[rotate](plot([[3,0],[3,3]],color=black),alpha,[0,0]); > dt:=T/cadr; > for i from 0 to cadr do > TT:=plots[textplot]([5,5,cat(`t=`,convert(evalf(dt*i,4),string))]); > rec:=body(3+eval(eq,t=dt*i)); > q||i:=plots[display]([l1,rec,ps,pb,TT,strin(eval(1+xi,t=dt*i),eval(3+eq-0.25,t=dt*i))],scaling=constrained); > od: > plots[display]([seq(q||i,i=0..cadr)],insequence=true,scaling=constrained); > > end: > pdif(rhs(sol),5);
>
|