声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1538|回复: 1

[其他相关] 求两自由度碰撞碰撞真相

[复制链接]
发表于 2011-12-4 22:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
本帖最后由 lihaitao123 于 2011-12-4 22:45 编辑

我做这图和陆启韶原文图差距很大,不知道怎么回事啊,希望搞这方面指教!
clc
clear all;

global   m r w  f
m=0.5;
r=0.8;

a=(m-r)/(m+1);
b=(1+r)/(m+1);
c=m*(1+r)/(m+1);
d=(1-m*r)/(m+1);



tstart=0;   tfinal=100;

y0=[.5;-1;0;0];    tout=tstart;     yout=y0.';

options=odeset('Events','on');   %\fs{开启事件判断功能}



for i=1:6

    [t,y,event]=ode45('xqythkfun',[tstart:0.3:tfinal],y0,options);

       %\fs{将每次得到的数据依次存在同一矩阵}

   tout=[tout;t(2:end)];   

   yout=[yout;y(2:end,:)];

   y0(1)=y(end,1);   y0(2)=y(end,2);%\fs{下一次弹跳的初位移}

   v10=y(end,3);    v20=y(end,4);

   y0(3)=a*v10+b*v20;
   y0(4)=c*v10+d*v20;

   tstart=t(end);

end

%\fs{时程}

figure

ylabel('位移');
xlabel('时间');

subplot(1 ,2 ,1)
plot(tout,yout(:,1),'r')
subplot(1, 2 ,2)
plot(tout,yout(:,2),'k')

function varargout=xqythkfun(t,y,flag)

switch flag

case ''

   varargout{1}=f(t,y);

case 'events'

   [varargout{1:3}]=events(t,y);

otherwise

   error(['Unknown flag ''' flag '''.']);

end

%\fs{---------------------------------------------}

%\fs{计算微分方程的子函数}

function ydot=f(t,y)

global w f

w=4.1;
f=10;
w2=1;


ydot=[y(3);

     y(4);

   -y(1)+cos(w*t);

   -w2^2*y(2)+f*cos(w*t);];

%\fs{----------------------------------------------}

%\fs{事件判断子函数}

function [value,isterminal,direction]=events(t,y)

Q=y(1)-y(2);   %\fs{当Q为0时,解微分方程终止}

value=Q;

isterminal=1;  %\fs{开启判断终止功能}

direction=-1;  %\fs{由Q减小的方向终止}


回复
分享到:

使用道具 举报

 楼主| 发表于 2011-12-4 22:50 | 显示全部楼层
陆启韶的原图太大原图,不过能肯定是时程是周期1的
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-20 23:20 , Processed in 0.052362 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表