离散模拟每一步都要先后更新速度与位置。即使使用同一条恢复力公式,位置使用旧速度还是新速度,也会产生不同的轨迹和能量变化。
质量取一,恢复加速度为负k乘位置,步长为h。显式方法同时按旧状态计算新位置和新速度;半隐式方法先用旧位置更新速度,再用新速度更新位置。两种方法都从同一组位置和速度出发。
本例输入与约定
初始位置-13、速度4,弹簧常数2,步长1/2。记录初始及十二次更新。
完整计算记录
步 | 显式位置/速度/两倍能量 | 半隐式位置/速度/两倍能量 0 | -13/4/354 | -13/4/354 1 | -11/17/531 | -9/2/17/659/2 2 | -5/2/28/1593/2 | 25/4/43/2/4323/8 3 | 23/2/61/2/4779/4 | 111/8/61/4/19763/32 4 | 107/4/19/14337/8 | 233/16/11/8/54531/128 5 | 145/4/-31/4/43011/16 | 255/32/-211/16/154067/512 6 | 259/8/-44/129033/32 | -167/64/-677/32/944547/2048 7 | 83/8/-611/8/387099/64 | -1521/128/-1187/64/5131379/8192 8 | -445/16/-347/4/1161297/128 | -3895/256/-853/128/16626243/32768 9 | -1139/16/-943/16/3483891/256 | -5601/512/2189/256/40954643/131072 10 | -3221/32/49/4/10451673/512 | -1223/1024/9979/512/200656611/524288 11 | -3025/32/3613/32/31355019/1024 | 18735/2048/21181/1024/1248269747/2097152 12 | -2437/64/3319/16/94065057/2048 | 61097/4096/23627/2048/4849313667/8388608
表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
复核方法与适用范围
每一步记录位置、速度和速度平方加k乘位置平方;最后一项是理想弹簧系统能量的两倍。计算保留精确分数,避免把舍入误差混进更新顺序的比较。
本例没有阻尼、碰撞或外力,也不保证任意步长都稳定。半隐式方法并非每一步都严格保持真实能量;选择步长仍应结合具体系统,不能把某一份表的表现当成所有参数的结论。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。
