原理
使用ode45的event函数,对运动方程积分,遇到特定实践(碰撞)则进行改变初值条件,重新开始积分
matlab代码
运动方程
小球在空中的运动方程为
function dqdt = rhs(t,y,ball)
% y = [y ydot]
ydot = y(2);
yddot = -ball.g;
dqdt = [ydot yddot]';
onebounce函数
可以将小球的弹跳分为多次过程,用循环实现,每次弹跳的代码基本相同
function [tt,yy] = my_bounce(t0,ystart,ball)
dt = 10; % 随便给,需要大一点
%%%% 计算一次碰撞前的t和y向量
options = odeset('AbsTol',1e-8,'RelTol',1e-8,'Events',@mycontact);
[t y] = ode45(@rhs,[t0 t0+dt],ystart,options,ball); %检测Event发生则积分终止
% ynew(1,1) = y(end,1);
y(end,2) = -ball.e*y(end,2);