离散模拟每一步都要先后更新速度与位置。即使使用同一条恢复力公式,位置使用旧速度还是新速度,也会产生不同的轨迹和能量变化。
质量取一,恢复加速度为负k乘位置,步长为h。显式方法同时按旧状态计算新位置和新速度;半隐式方法先用旧位置更新速度,再用新速度更新位置。两种方法都从同一组位置和速度出发。
初始位置-4、速度-2,弹簧常数2,步长1/2。记录初始及十二次更新。
步 | 显式位置/速度/两倍能量 | 半隐式位置/速度/两倍能量 0 | -4/-2/36 | -4/-2/36 1 | -5/2/54 | -3/2/22 2 | -4/7/81 | -1/2/5/51/2 3 | -1/2/11/243/2 | 9/4/11/2/323/8 4 | 5/23/2/729/4 | 31/8/13/4/1299/32 5 | 43/4/13/2/2187/8 | 57/16/-5/8/3299/128 6 | 14/-17/4/6561/16 | 47/32/-67/16/11187/512 7 | 95/8/-73/4/19683/32 | -87/64/-181/32/73091/2048 8 | 11/4/-241/8/59049/64 | -449/128/-275/64/352851/8192 9 | -197/16/-263/8/177147/128 | -999/256/-101/128/1018403/32768 10 | -115/4/-329/16/531441/256 | -1201/512/797/256/2712819/131072 11 | -1249/32/131/16/1594323/512 | 393/1024/2795/512/15778499/524288 12 | -559/16/1511/32/4782969/1024 | 5983/2048/5197/1024/89813907/2097152
表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
每一步记录位置、速度和速度平方加k乘位置平方;最后一项是理想弹簧系统能量的两倍。计算保留精确分数,避免把舍入误差混进更新顺序的比较。
本例没有阻尼、碰撞或外力,也不保证任意步长都稳定。半隐式方法并非每一步都严格保持真实能量;选择步长仍应结合具体系统,不能把某一份表的表现当成所有参数的结论。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。