www.gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第5章/li5_3.m

     clear all;
g=9.8;         %重力加速度
v0=0;          %初始速度
y0=1.2;        %初始位置
m=0.4;         %小球质量
t0=0;          %起始时间
K=0.85;         %弹跳的损耗系数
n=5000;        %仿真的总步长
dt=0.005;      %仿真步长
v=v0;          %初状态
y=y0;
vx=0;
vz=0;
sx=0;
sz=0;
for k=1:n
    if y>0        %小球在空中的动力方程计算
        v=v-g*dt;
        y=y+v*dt;
    else                %如果碰击作如下计算
        y=y-K.*v*dt;
        v=-K.*v-g*dt;
    end
   Fx=randn;          %x水平方向的随机力,方差为1
   ax=Fx./m;          %Fx导致的x水平方向的加速度
   vx=vx+ax*dt;       %小球在x水平方向的瞬时速度
   sx=sx+vx*dt;       %小球在x水平方向上的位移
   Fz=randn;          %z水平方向的随机力,方差为1
   az=Fz./m;          %Fz导致的z水平方向的加速度
   vz=vz+az*dt;       %小球在z水平方向的瞬时速度
   sz=sz+vz*dt;       %小球在z水平方向上的位移
   plot3(sx,sz,y,'r.');
   grid on;hold on;
   axis([-2 2 -2 2 0 1]); %坐标范围固定
   set(gcf,'DoubleBuffer','on');   %双缓冲避免作图闪烁
   xlabel('水平方向x');ylabel('水平方向z');
   zlabel('垂直方向y');title('小球的弹跳过程');
   drawnow;
end