离散模拟每一步都要先后更新速度与位置。即使使用同一条恢复力公式,位置使用旧速度还是新速度,也会产生不同的轨迹和能量变化。
质量取一,恢复加速度为负k乘位置,步长为h。显式方法同时按旧状态计算新位置和新速度;半隐式方法先用旧位置更新速度,再用新速度更新位置。两种方法都从同一组位置和速度出发。
本例输入与约定
初始位置-9、速度-3,弹簧常数4,步长1/4。记录初始及十二次更新。
完整计算记录
步 | 显式位置/速度/两倍能量 | 半隐式位置/速度/两倍能量 0 | -9/-3/333 | -9/-3/333 1 | -39/4/6/1665/4 | -15/2/6/261 2 | -33/4/63/4/8325/16 | -33/8/27/2/4005/16 3 | -69/16/24/41625/64 | 9/32/141/8/79605/256 4 | 27/16/453/16/208125/256 | 591/128/555/32/1581381/4096 5 | 561/64/213/8/1040625/1024 | 3993/512/1629/128/26558613/65536 6 | 987/64/1143/64/5203125/4096 | 18495/2048/2523/512/367527141/1048576 7 | 5091/256/39/16/26015625/16384 | 65577/8192/-8403/2048/4582784565/16777216 8 | 5247/256/-4467/256/130078125/65536 | 163119/32768/-99189/8192/65961639045/268435456 9 | 16521/1024/-4857/128/650390625/262144 | 92601/131072/-559875/32768/1262415007701/4294967296 10 | 6807/1024/-55377/1024/3251953125/1048576 | -1961697/524288/-2332101/131072/25603035416613/68719476736 11 | -28149/4096/-7773/128/16259765625/4194304 | -15213495/2097152/-7366707/524288/448523918210421/1099511627776 12 | -90333/4096/-220587/4096/81298828125/16777216 | -75107313/8388608/-14253333/2097152/6453738472515525/17592186044416
表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
复核方法与适用范围
每一步记录位置、速度和速度平方加k乘位置平方;最后一项是理想弹簧系统能量的两倍。计算保留精确分数,避免把舍入误差混进更新顺序的比较。
本例没有阻尼、碰撞或外力,也不保证任意步长都稳定。半隐式方法并非每一步都严格保持真实能量;选择步长仍应结合具体系统,不能把某一份表的表现当成所有参数的结论。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。