收益:
- 通过让 AI 将物理计算转换为 NumPy/SciPy 代码并运行代码本身,能够依赖确定性输出,而不是口头猜测
- 能够通过在答案已知的简单情况下进行测试并检查其收敛性来验证数字代码的可靠性。
- 通过将变量单位反映到代码中,能够以物理方式提供结果的单位和级别
物理学中的许多问题无法用手解决:积分没有解析解,方程组的根无法以封闭形式找到,或者计算必须重复数千次。这就是数值方法发挥作用的地方:计算机不是使用精确的公式,而是以近似但受控的精度逐步计算。在本单元中,您将学习如何使用人工智能(AI)作为计算物理计算的代码伙伴,如何验证其生成的代码,以及您应该避免陷入哪些陷阱。物理学家的标准工具将是 Python 语言和 NumPy(数值数组和快速数学库)以及 SciPy(科学计算库;包括集成、激进查找、优化)。
为什么人工智能+Python,为什么不手工呢?
手动执行数值计算既缓慢又容易出错。人工智能可以在几秒钟内将您的物理构造转换为正在运行的 Python 代码。但这里的黄金法则是:人工智能编写代码,你运行代码并用物理验证结果。 AI 说“这段代码给出了那个”是一个预测;实际运行代码并查看输出是确定性事实。法学硕士可能会“计算”他在脑海中编写的代码的输出并说出错误的数字;而当运行相同的代码时,它会给出正确的结果。因此,永远不要相信人工智能口头给出的数字结果——运行代码。
基本计算任务和人工智能的作用
任务
方法/工具
物理验证
定积分
scipy.integrate.quad
极限状态、量纲分析
方程根
scipy.优化.brentq
将根放在适当的位置并检查它是否为零。
线性方程组
numpy.linalg.solve
将解决方案放回到系统中
导数(数字)
中心差或 numpy.gradient
与解析推导的比较
批量向量计算
NumPy 数组
单位和等级控制
人工智能非常擅长建议哪些工具是合适的,并确保语法(代码编写规则)正确。但您可以决定哪种方法具有物理意义以及结果的准确性。
一步一步:可验证的数值计算
1.明确问题和单位。例如:“计算从 0 到无穷大的积分 e^(−x²);结果应为 √π/2 ≈ 0.8862。”重写预期结果(如果有)使验证更容易。
2.向AI询问代码,但你运行输出。复制代码块并在您自己的环境(Jupyter、Colab、本机 Python)中运行它。
3. 用已知情况进行测试。在您已经知道答案的简单情况下尝试代码。例如,使用您亲手知道的示例来测试积分代码,例如 ∫₀1 x dx = 0.5。如果代码正确地给出了这一点,您的信心就会增加。
4. 检查收敛性。在数值方法中,当增加步数时,结果应接近恒定值。如果不接近,则该方法不合适。
5. 检查单位和等级。始终提供带有物理单位和顺序的数值结果。
提示:当向人工智能请求代码时,请说“还包括一条测试线,用于将结果与已知的分析值进行比较。”因此,代码既执行计算又在已知情况下测试自身。这使得错误立即可见。
三个迷你箱子
案例 1——口头结论不正确。一名学生让 AI 编写一个积分代码,AI 说“这个代码给出的结果约为 1.77”。学生运行代码:实际输出是0.886。 AI 在预测代码输出时犯了错误;代码是正确的。教训:相信代码,不要相信口头猜测。
情况 2 — 数值不稳定。一名研究人员使用人工智能编写的求根代码来寻找方程的根。代码返回一个根,但是当研究人员将根放回到方程中时,结果不是零而是一个非常大的数字。问题是起始范围不包含根; AI假设了适当的范围。研究人员用物理信息修正了区间,找到了正确的根。
案例 3 — 获得确认。一位工程师想要一个能够以数值方式计算负载下梁的挠度的代码。该代码有效,但结果显示了数米的偏转——这对于钢梁来说是不可能的。工程师检查了这些单位:AI 假装弹性模量以 Pa 为单位,而不是 GPa,缺少 10⁹ 系数。经过单位修正后,结果减小到毫米,比较合理。
四个可复制模板
1)带验证线的数值计算:
编写执行以下物理计算的 Python (NumPy/SciPy) 代码:[问题]。以 SI 单位声明所有变量并用注释行指定单位。在代码末尾添加一个检查行(断言或打印),将结果与已知的分析/简单值进行比较。我将运行代码;您不必猜测输出,只需编写代码和预期的排名即可。
2)方法选择咨询:
我想用数值方法解决以下问题:[问题]。哪个 SciPy/NumPy 函数合适,为什么?建议 2 种替代方法,写下每种方法在准确性和稳定性方面的优缺点。说明在哪种身体状况下应优先选择哪一种。
3)收敛性检查:
编写 Python 代码,通过增加以下数值计算的步数(例如 N=10、100、1000)来显示结果如何收敛。将结果打印在表格中。如果不收敛,请用一句话解释其物理/数值原因。代码:[此处]
4)机组控制:
在下面的代码中,注释掉每个变量的SI单位,并检查最终结果的单位是否与预期单位一致(例如米,焦耳)。如果不一致,请显示它在哪一行。代码:[此处]
弱提示/强提示
弱:“说出这个积分的结果:∫₀^∞ x²·e^(−x) dx”
结果:人工智能在脑中吐出一个数字(也许是对的,也许是错的);没有什么可执行的,没有什么可验证的。
Strong:“编写 Python 代码,使用 scipy.integrate.quad 计算积分 ∫₀^∞ x²·e^(−x) dx。添加一个断言行,将结果与该积分的解析值 2!= 2 进行比较。我将运行该代码。”
结果:可执行代码、内置验证(与分析值比较)和可靠的结果。
常见错误
- 依靠人工智能的口头数字结果。 LLM 可能会错误地预测头部代码的输出。始终运行代码。
- 未在已知情况下进行测试。未使用您知道答案的简单示例进行测试的代码可能包含隐藏错误。
- 不检查收敛性。坚持使用单步计数会掩盖结果在数字上是否可靠。
- 不反映代码中的单位。不注释变量的单位会导致无声的 10ⁿ 错误。
- 忽略库版本/假设。有时人工智能可能会产生不存在的函数名称或过时的语法;当你运行它时,它是显而易见的。
注意:在将数值结果放入出版物、作业或设计之前,请使用独立的已知案例测试代码,并以单位/顺序提供结果。即使工作代码也可能计算出错误的物理原理;仅仅因为代码有效并不意味着物理原理是正确的。
总之
AI 是将物理计算转化为 Python 代码的强大伙伴;但他口头给出的数字只是估计,而不是事实。安全的工作流程很明确:用单位定义问题,让人工智能编写代码,但你运行输出,用已知情况测试代码,检查收敛性和单位。确定性的是执行的代码;它不是法学硕士。在下一个单元中,我们将把这个数值基础转移到时变物理系统的模拟中。
应用任务
选择您知道解析解的物理微积分(例如,自由落体物体在一段时间内的速度或简单的定积分)。让AI用模板1编写一段Python代码;自己运行代码。将结果与您已知的分析值进行比较。然后通过更改步数或参数来观察结果的表现。注意 5-6 句话:代码的输出是否与口头预测相符,是否存在单位/顺序问题?
清单
- [ ] 我澄清了问题和所有变量的单位。
- [ ] 我跑了AI自己写的代码,我不相信口头结果。
- [ ] 我用一个简单的情况测试了代码,我知道答案。
- [ ] 我检查了收敛性或参数敏感性。
- [ ] 我实际提供了结果的单位和顺序。
- [ ] 我已经验证我使用的库函数是真实的并且是最新的。