MATLAB自由下落物体每秒速度计算函数开发问题
MATLAB自由下落速度计算函数修复方案
原代码核心问题
- 落地时间计算错误:使用
linspace(0,h)生成的高度数组计算t,得到的是一组对应不同高度的时间值,而非物体从h高度落地的总时间,导致后续判断和循环逻辑完全失效。 - 循环逻辑混乱:
for time = n+1仅执行一次,内部while循环因用数组与标量比较,条件恒成立陷入死循环,只能输出第一个速度值。 - 未按要求返回结果:仅用
disp打印数据,没有返回符合要求的速度数组,也不符合函数的返回值设计。
修复后的完整代码
function v = freefall(h) g = 9.8; % 重力加速度 t_total = sqrt(2*h/g); % 计算总落地时间 if t_total <= 1 % 1秒内落地,返回落地时刻的速度 v = g * t_total; else % 生成落地前所有整数秒的时间点(1s,2s,...,floor(t_total)s) time_points = 1:floor(t_total); % 计算每个时间点的速度 v = g .* time_points; end end
代码说明
- 总落地时间计算:用公式
t_total = sqrt(2h/g)直接计算物体从高度h自由下落到地面的总时间,这是后续逻辑的核心依据。 - 1秒内落地的情况:直接用
v = g*t_total计算落地速度(等价于sqrt(2gh),两种写法均可)。 - 超过1秒落地的情况:
- 用
1:floor(t_total)生成所有落地前的整数秒时间点,比如h=80米时,t_total≈4.04,floor(t_total)=4,时间点为[1,2,3,4]。 - 每个时间点的速度用
v = g*time计算,得到的数组[9.8,19.6,29.4,39.2]与示例要求完全一致。
- 用
测试验证
调用freefall(80),返回结果为[9.8000, 19.6000, 29.4000, 39.2000],符合需求;调用freefall(4),t_total≈0.9035,返回8.8543,即落地时刻的速度。
内容的提问来源于stack exchange,提问作者Silverlik
相关产品推荐
相关产品推荐

