📄 ch2example6main.m
字号:
% ch2example6main.m
clear;
v0=0; y0=1; % 球的初始状态
x_state=[v0,y0];% 将初始状态赋值到状态变量中
dt=0.01; % 仿真步进
t=0:dt:5; % 仿真时间序列
K=0.85; % 碰撞衰减系数
for k=1:length(t) % 仿真开始,每次循环向前推进一个仿真步进dt
x(k,:)=x_state; % 记录并保存当前状态的计算结果
[t_out, x_out]=ode45('ch2example6statefun',[t(k),t(k)+dt],x_state);
% 计算下一个时刻的新状态
% 可换用ode23、ode113、ode23t、ode15s、ode23s以及ode23tb求解器
x_state=x_out(length(x_out),:); % 更新状态
if (x_state(2)<=0) & (x_state(1)<0) % 当速度为负(球向下运动)且已经接触碰撞面
x_state(1)=-K*x_state(1); % 处理碰撞瞬间情况:速度反向并衰减K
end
% 动画作图:显示小球弹跳过程
y=x_state(2); % 小球当前位置
subplot(2,1,1);plot(0,y,'o');
axis([-2 2 -0.1 1]); % 坐标范围固定
set(gcf,'DoubleBuffer','on'); % 双缓冲避免作图闪烁
drawnow; % 立即显示作图
end
% 仿真结束。最后输出计算时间序列上的结果:随时间变化的速度和位移曲线
subplot(2,1,2);plotyy(t,x(:,1),t,x(:,2),'plot');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -