matlab弹跳球模型编程挑战

小球起始位置为10米,垂直向上的运动速度是15米每秒,在重力的作用下运动。当小球落地时会反弹,因碰撞导致能量损失,设小球撞击地面时,从地面弹起的速度和小球撞击地面的速度满足V弹起=-k*V落地,式中k=0.8称为反弹系数。
求:
(1)求小球第100次撞击地面时的时间和行驶的路程。
(2)求小球在任意时刻的位置,并绘图。
(3)求小球在任意时刻的速度,并绘图。

你好,供参考:

clc;clear
% 
h0 = 10;
v0 = 15; 
g=9.8;
h0max = h0 + v0^2/(2*g);
t1 = v0/g + sqrt(2*h0max/g);
s1 = 2*h0max-h0;
n = 100;
t = zeros(1, n);
hmax = zeros(1,n);
s = zeros(1,n);
t(1) = t1;
hmax(1) = h0max;
s(1) = s1;
k = 0.8;
tt = linspace(0, t1, 100);
h = h0+v0*tt-1/2*g*tt.^2;
v = v0 - g*tt;

for i = 2:n
    hmax(i) = hmax(i-1)*k^2;
    vmax = sqrt(2*g*hmax(i));
    t(i) = t(i-1) + 2*sqrt(2*hmax(i)/g);
    s(i) = s(i-1) + 2*hmax(i); 
    et = linspace(0,t(i)-t(i-1),100);
    tt = [tt, t(i-1) + et];
    h = [h, vmax*et - 1/2*g*et.^2];
    v = [v, vmax - g*et];
end
figure(1);clf
plot(tt,h); hold on; plot(tt,v)
xlabel('时间t'); ylabel('位置和速度'); legend('位置','速度')
fprintf('第%d次撞击时间t=%fs, 行驶路程s=%fm\n', n, t(n), s(n))

img

第100次撞击时间t=20.373935s, 行驶路程s=109.331066m