刚体绕瞬心运动的转动方程

是这样的,我们做这个关于刚体绕瞬心运动的内容,用长为2l,质量为m的木杆斜靠在光滑的墙壁与地面之间,在重力作用下做下滑运动,将木杆的运动分成了两个阶段讨论。

img

这下面是第一个阶段的代码,但是运行出来不是想要的内容。原本是根据书上的,但是不对,这是自己改过的,还是运行的不是自己想要的图,想问下有没有人帮忙看一下,问题出在了哪里。




```%定义x=y(1)  dx/dt=y(2)   y=y(3)  dy/dt=y(4)  theta=y(5)  d theta/dt =y(6)
M=5;w=0.00;l=4;g=9.81 ;                                  %定义木杆的质量M,加加速度w,杆长l,重力加速度g
Ic=M*1^2/3;                                              %对质心的转动惯量
dt=0.001;
tspan=(0:dt:2)     ;                                     %定义变量的积分范围,上下限
y0=[-l*cos(2*pi/3),0,l*sin(2*pi/3),0,(2*pi/3),0]  ;      %初始条件***********书上存在错误
options=odeset('Events',@events);                        %开启事件判断功能
[T,Y,TE]=ode45(@fy4,tspan,y0,options);     
plot(T,Y,'r-');
title('方程解的关系图')
figure;

N=length(T)-1   ;  t=T(2:N);                       %解方程中的时间变量
xc=Y(2:N,1);    v_xc=Y(2:N,2);                     %质心坐标与速度
yc=Y(2:N,3);    v_yc=Y(2:N,4);
fy=Y(2:N,5);    v_fy=Y(2:N,6);                     %转角与角速度
xs=xc-v_yc./v_fy;                                  %瞬心坐标
ys=yc+v_xc./v_fy;

subplot(2,2,1)
plot(xc,yc,'r-',xs,ys,'k-');                       %质心轨迹和瞬心轨迹
axis auto
xlabel('x')                                         %给坐标轴命名
ylabel('y')

title('木棍沿墙下滑运动图——前半段');                %图形标题
legend(['质心轨迹';'瞬心轨迹']);                       %添加图例

hold on 

for k=2:50:N                                      %通过角度改变确定木棍的位置***********通过改变步长来详细描述木杆的变化
    x_a=xc(k)+l*cos(fy(k));
    x_b=xc(k)-l*cos(fy(k));
    y_a=yc(k)+l*sin(fy(k));
    y_b=0;
    pause(0.5)
    plot([x_a,x_b], [y_a,0],xc(k),yc(k),'o');
  
end

dxs=gradient(xs,dt);                    %求xs的梯度,求瞬心随时间的变化率
dys=gradient(ys,dt);
p=1:200:N;
quiver(xs(p),ys(p),dxs(p),dys(p));      %以200为步长选取数据绘制瞬心变化率的矢量图      
subplot(2,2,2)
Is=Ic+M*((xs-xc).^2+(ys-yc).^2);        %转动惯量
plot(t,Is);                             %绘制转动惯量Is与时间t的变化曲线
axis auto
xlabel('t');                            %给坐标轴命名
ylabel('Is');

title('Is随时间变化图——前半段')        %编辑图形表头
subplot(2,2,3)                         %选择画图位置
px=M.*v_xc;
py=M.*v_yc;                             %动量
dd=(dxs.*py-dys.*px);                   
plot(t,dd);
axis([0,1.4,-60,90]);
xlabel('t');
ylabel('dR/dt     \times  P')

title('dR/dt     \times  P     P变化图——前半段');   %图形标题

subplot(2,2,4);                            %选择画图位置
axis auto
hold on

title('方言公式验证图——前半段')           %编辑图形表头

xlabel('t');
ylabel('y');                               %给坐标轴名命

V=1:70:N;                                  %取部分数据画图
tt=t(V);
dfr=M*g.*(xs-xc);
dfr=dfr(V);                                %外力矩和(右边第一项)
left = dfr-dd(V);                          %方言公式等号右边
dfl = gradient(Is.*v_fy,dt);
right =dfl(V);                             %方言公式等号左边
plot(tt,left,  tt,right,'o',  tt,dfr,'*'); %绘制图像



legend('公式左边','公式右边','外力矩和');

TE;                                       

y_end=Y(end,:);                          %输出运动第二阶段的初始条件



function f= fy4(t,y)                %待解的常微分方程
l=4;g=9.81;
f=[y(2);
    -3*g*cos(y(5))*sin(y(5))/4+1*cos(y(5))*y(6)^2;
    y(4);
    -3*g*cos(y(5))^2/4-l*sin(y(5))*y(6)^2;
    y(6);
   -3*g*cos(y(5))/(4*l) ];
end

function [value,isterminal,direction] = events(T,Y)
l=4;g=9.81;
value=-3*g*cos(Y(5))*sin(Y(5))/4+1*cos(Y(5))*Y(6)^2;
isterminal = 1;             %表示当value=0时停止积分
direction = [];            %不考虑变量的变化方向
end


这下面是书上的内容

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/583631602966152.jpg "#left")


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/530341602966196.jpg "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/215841602966190.jpg "#left")

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/201063602966167.jpg "#left")

书上的错误很多,上面的代码是自己修改过后的,好像还是不太对,有没有人帮忙看看这块内容呢