从物理学验证守恒定律

计算科学 计算物理学
2021-11-30 05:38:00

假设我想实现一个物理系统的数值模型(例如一个简单的波动方程)。当然,能量守恒定律对于这个系统是有效的。有没有办法验证我的波动方程的实现是按照一般的能量守恒定律来实现的?

我不想实现一些测试场景并检查能量是否始终保持不变。相反,我想使用某种符号求解器来验证我的实现的这个属性。类似于Cryptol的东西,但用于物理,当然还有 GPL。

2个回答

测试 ODE 和 PDE 数值方法的典型方法是使用制造解法之类的方法;可以在此处找到有关验证大型物理代码的更广泛的报告。

对于 ODE 求解器,测试求解方法的基本思想

u˙(t)=f(u(t))

将选择一个解决方案,例如,然后使用符号代数系统计算源项应该是什么。对于此示例,您还可以通过直接替换来计算初始条件和边界条件。在这里,u(t)=etff(u)=et=uu(0)=1

有 GPL 和 BSD 许可的符号操作程序可以为您处理代数。例如,在 Python 中,SageSympy都可以进行符号操作。

即使您说您不希望这样做,但在实践中也可以明确地测试对称性或能量守恒(在公差范围内)之类的东西。

存在替代方法,但它们通常不切实际。例如,您可以使用 HOL Light 或 Coq 之类的计算机辅助证明系统来推理您的程序,但计算机辅助证明将花费不切实际的时间来执行。Flyspeck 项目旨在对开普勒猜想进行计算机辅助证明,估计计算时间约为 2.5 年,这比高性能计算中的一些“英雄”计算要长。您还可以使用区间算术之类的东西来确保您的结果在给定范围内,但是依赖效应之类的东西可能会使输出区间相对于您想要的精度非常大,并且您可能会因缺乏基础设施而受苦(即, 做区间算术的库不多,

我从你关于 Cryptol 的评论中得知,你可能想做某种计算机辅助证明。基于上述,我不会推荐它,但如果它可以有效地完成,那将是对数值方法文献的一个非常有趣的贡献。

如果您的微分方程以某种形式支持能量守恒,那么您应该能够首先通过分析证明它。因此,您将系统的能量写为某种体积积分,并对其进行时间导数,并使用您的微分方程进行相关量的时间演化(在您的情况下为波动方程),以表明总能量同样为零——这将证明模型服从能量守恒。但即使是这样,如果您在计算机上求解的离散空间和时间方程仍然满足机器精度的守恒定律(查找保守的有限差分或有限体积方法),这也是一个单独的问题。

当然表示物理定律的方程应该是符合能量守恒的,但是在建立一个数值模型的时候,做了各种近似,所以模型中的实际方程并不能保证满足“真实的”守恒定律。例如,您模拟粘性介质中的物体运动,因此存在摩擦力您可以编写并求解物体的运动方程,但显然这里没有能量守恒,因为模型中没有介质的热能。这并不意味着身体运动的模型不“正确”,它对于计算身体轨迹是完全正确的。F=kVmV˙=kV

另一方面,模型可能会满足某种东西的守恒,这种东西不是完整的物理能量,而是它的某种代理。一个很好的例子是等离子体湍流中的“能量”,,其中是等离子体密度和电势波动,请参阅关于长谷川-若谷漂移湍流,例如, http: //iri.columbia.edu/~suzana/papers/camargo_biskamp_scott95.pdfE=(n2+|ϕ|2)dVn,ϕ