离散模拟每一步都要先后更新速度与位置。即使使用同一条恢复力公式,位置使用旧速度还是新速度,也会产生不同的轨迹和能量变化。
质量取一,恢复加速度为负k乘位置,步长为h。显式方法同时按旧状态计算新位置和新速度;半隐式方法先用旧位置更新速度,再用新速度更新位置。两种方法都从同一组位置和速度出发。
本例输入与约定
初始位置3、速度-4,弹簧常数2,步长1/4。记录初始及十二次更新。
完整计算记录
步 | 显式位置/速度/两倍能量 | 半隐式位置/速度/两倍能量 0 | 3/-4/34 | 3/-4/34 1 | 2/-11/2/153/4 | 13/8/-11/2/1137/32 2 | 5/8/-13/2/1377/32 | 3/64/-101/16/81617/2048 3 | -1/-109/16/12393/256 | -787/512/-811/128/5881137/131072 4 | -173/64/-101/16/111537/2048 | -11997/4096/-5701/1024/403939217/8388608 5 | -137/32/-635/128/1003833/16384 | -129587/32768/-33611/8192/25830385137/536870912 6 | -2827/512/-361/128/9034497/131072 | -1175997/262144/-139301/65536/1538207092817/34359738368 7 | -797/128/-61/1024/81310473/1048576 | -9346387/2097152/61589/524288/87385295593137/2199023255552 8 | -25565/4096/3127/1024/731794257/8388608 | -64931997/16777216/9839099/4194304/4990627187462417/140737488355328 9 | -11219/2048/50581/8192/6586148313/67108864 | -375811187/134217728/143644789/33554432/306304651529185137/9007199254740992 10 | -128923/32768/73019/8192/59275334817/536870912 | -1481519997/1073741824/1524969499/268435456/20799157284553368017/576460752303423488 11 | -1747/1024/713075/65536/533478013353/4294967296 | 1829116013/8589934592/13681275989/2147483648/1500764166886516441137/36893488147419103232 12 | 265843/262144/768979/65536/4801302120177/34359738368 | 122254020003/68719476736/107621091899/17179869184/107604440779157951529617/2361183241434822606848
表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
复核方法与适用范围
每一步记录位置、速度和速度平方加k乘位置平方;最后一项是理想弹簧系统能量的两倍。计算保留精确分数,避免把舍入误差混进更新顺序的比较。
本例没有阻尼、碰撞或外力,也不保证任意步长都稳定。半隐式方法并非每一步都严格保持真实能量;选择步长仍应结合具体系统,不能把某一份表的表现当成所有参数的结论。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。
