同样的弹簧公式为什么更新顺序会改变长期运动:规则练习第04例
离散模拟每一步都要先后更新速度与位置。即使使用同一条恢复力公式,位置使用旧速度还是新速度,也会产生不同的轨迹和能量变化。
质量取一,恢复加速度为负k乘位置,步长为h。显式方法同时按旧状态计算新位置和新速度;半隐式方法先用旧位置更新速度,再用新速度更新位置。两种方法都从同一组位置和速度出发。
本例输入与约定
初始位置-10、速度2,弹簧常数2,步长1/4。记录初始及十二次更新。
完整计算记录
步 | 显式位置/速度/两倍能量 | 半隐式位置/速度/两倍能量 0 | -10/2/204 | -10/2/204 1 | -19/2/7/459/2 | -33/4/7/1481/8 2 | -31/4/47/4/4131/16 | -175/32/89/8/93993/512 3 | -77/16/125/8/37179/128 | -513/256/887/64/6557321/32768 4 | -29/32/577/32/334611/1024 | 3505/2048/7609/512/475460073/2097152 5 | 461/128/1183/64/3011499/8192 | 85407/16384/57367/4096/33622137161/134217728 6 | 2105/256/4271/256/27103491/65536 | 1056785/131072/373529/32768/2232985846953/8589934592 7 | 12691/1024/6437/512/243931419/524288 | 10385727/1048576/1931447/262144/137707225429001/549755813888 8 | 31819/2048/13057/2048/2195382771/4194304 | 88151665/8388608/5065849/2097152/7976018650998633/35184372088832 9 | 140333/8192/-5705/4096/19758444939/33554432 | 657588447/67108864/-47624873/16777216/450567593854000841/2251799813685248 10 | 274961/16384/-163153/16384/177826004451/268435456 | 4222120145/536870912/-1038587431/134217728/26455609333464259113/144115188075855872 11 | 936691/65536/-601267/32768/1600434040059/2147483648 | 21246141567/4294967296/-12530819593/1073741824/1707570048863506700681/9223372036854775808 12 | 1272115/131072/-3341759/131072/14403906360531/17179869184 | 48476434225/34359738368/-121492698311/8589934592/120433770618272049372393/590295810358705651712
表中编号仅用于识别本例的元素。读取一个结果时,应先核对它对应的输入、处理顺序和边界约定;布尔值表示条件是否成立,空集合表示没有符合要求的对象,不应把这些字段混成同一种数值。
复核方法与适用范围
每一步记录位置、速度和速度平方加k乘位置平方;最后一项是理想弹簧系统能量的两倍。计算保留精确分数,避免把舍入误差混进更新顺序的比较。
本例没有阻尼、碰撞或外力,也不保证任意步长都稳定。半隐式方法并非每一步都严格保持真实能量;选择步长仍应结合具体系统,不能把某一份表的表现当成所有参数的结论。
练习时可以先独立计算最前面的一步,再检查最后的整体不变量。若结论不同,应保留各步记录,定位第一处差异;只调整最终数字会掩盖规则理解上的问题。改变输入后也要重新演算,而不是照抄这一例的输出。
