走进科学
计算机执行复杂的科学计算时,误差或许超出想象
科学家发现,由于混沌动力学系统的数学复杂性,当计算机执行复杂计算时,误差高达15%。
“我们的工作表明,混沌动力学系统的行为超过了任何数字计算机的负载。”英国UCL的计算科学家Peter Coveney说,“混沌现象比许多人可能意识到的更为普遍,即使对于非常简单的混沌系统,数字计算机所做数字计算也可能得到错误结果,而这些错误并不明显,但却会产生很大的影响。”
几个世纪以来,理论学者一直在思考,微小的作用会被如何放大,直到产生惊人的后果。
在混沌理论中,最为出名的例子就是“蝴蝶效应”:一只蝴蝶在哈尔滨的某处花坛里振翅起飞,翅膀扇动引发的空气震荡最终在夏威夷引起了飓风。
这是一个富有诗意的概念,虽然看起来有些古怪,但数学模型表明,该概念具有非常可靠的理论支撑。
蝴蝶效应的发现,主要归功于美国数学家和气象学家爱德Edward Norton Lorenz。当他在60年代重复进行天气模拟时,为了图方便,在数据输入的时候走了捷径:他在第二轮计算中使用了简化的数字(输入0.506而不是0.506127)。
Lorenz后来回忆说:“我去大厅喝了一杯咖啡,大约一个小时后返回实验室,在这段时间内,计算机模拟了未来大约两个月的天气,结果与上一轮模拟输出的打印数字完全不同。”
Lorenz的四舍五入后的结果表明,在复杂、混乱的系统中,初始条件的微小改变,随时间推移产生巨大的后果,在复杂系统中,许多变量相互交织,彼此影响。
除了天气预报,多天体的轨道、湍流和分子动力学的所有方面都已经证明,滚雪球式的误差放大现象并不罕见。
事实是,即使半个世纪前人们就已经知道了蝴蝶效应,它现在仍然是计算机计算方式的基本问题。
Coveney和他的团队在新论文中解释说:“对初始条件的极端敏感性是混沌动力学系统的一个特征。自从数字计算机首次被应用于数值科学以来,众所周知,由于实数的离散近似而导致的精度损失会在较短的仿真时间后,极大地改变混沌系统的动态过程。”
这种精度损失在简单的计算中不会变得显而易见。智能手机上的计算器可能非常适合您日常生活中所能遇到的问题。
但是,在具有大量变量和起始条件的大型计算中,一开始的微小舍入误差会在给定模拟结束时导致巨大的计算误差。
研究人员说,问题的核心是浮点算术:计算机使用二进制代码表达实数的标准化方法。
在大型和复杂的系统中,这些近似值可能会引入显著的误差。
塔夫茨大学的数学家Bruce Boghosian说:“长期以来,人们一直认为舍入误差是没有问题的,特别是如果我们使用双精度浮点数——使用64位而不是32位的二进制数的话。但是在我们的研究中,我们已经证明,由于浮点数所代表的分数分布不均匀,仅通过增加位数,问题不可能自己消失。”
在研究中,研究小组将已知的简单混沌系统Bernoulli Map与对该系统的数字模拟进行了比较,并在仿真混沌动力学系统时发现了他们所说的“系统畸变”和“新病态特性”。
研究人员只是简单地要求计算机执行完全的数学计算,就发现了蝴蝶效应更微妙的等效物。
Coveney告诉科学博物馆博客说:“对于Lorenz来说,用来进行模拟的数字的最后几位小数位只有很小的不同,这导致了他的结果出现分歧。他和其他人都没有意识到,并且在我们的工作中所强调的是,任何有限的初始条件都描述了一种行为,这种行为在统计学上可能非常不具有代表性。”
尽管研究人员承认Bernoulli Map是一个简单的混沌系统,不一定能够代表更复杂的动力学模型,但他们警告说,“浮点蝴蝶”的阴险性质意味着没有科学家能够放任自流。
作者写道:“我们不认为从业者应该从“他们的模型比这一模型更为复杂”这一事实中获得安慰。我们的看法是,既然如此简单的系统都会表现出如此严重的病态,那更复杂的系统可能会表现得更加邪恶。”
研究团队说,在我们以某种方式解决问题之前,各地的研究人员需要密切注意自家实验室计算机吐出的数字。
研究结果发表在《高级理论与模拟》上。
本文译自 sciencealert,由 majer 编辑发布。