1.2 1.2 量纲、尺度与合理简化


1.2 量纲、尺度与合理简化

本节摘要:量纲分析与尺度分析是建模者手里最便宜的两件检查工具:前者验证公式对不对,后者决定模型里哪些项可以扔。本节给出量纲一致性检查的操作步骤、巴克利量纲法的完整算例,以及用数量级比较做简化的决策规则,全部附可运行代码。

先明确目标

阅读完本节,你应当能够:

  1. 用量纲一致性检查任意公式的正确性,并定位错误来源;
  2. 用巴克利法从量纲出发"猜出"物理关系的形式;
  3. 用尺度比较决定模型中某一项能否忽略,并说出忽略的代价。

一个被量纲救下的公式

接手一根输水管道冲刷坑深度的估算任务时,现场给的候选公式里有一项是流速的平方除以重力加速度再减去水深。先别管数值,量纲先过一遍:流速平方除以重力加速度的量纲是长度,减去水深(也是长度)没问题;但另一个版本把流速平方写成了流速三次方,量纲立刻变成"长度平方每秒",与减法另一边不匹配——公式抄错了。量纲检查的成本是三十秒,收益是避免一次整表重算。

操作上,我建议用符号计算库把量纲当代数对象处理,人脑推导容易在指数上出错:

from sympy import symbols, solve, Matrix # 颗粒直径 D、黏度 mu、密度差 dr v, g, rho, mu, dr, D = symbols('v g rho mu dr D', positive=True) a1, a2, a3, a4, a5, a6 = symbols('a1 a2 a3 a4 a5 a6') # 各物理量的量纲向量(按 M, L, T 三个基本量纲) dims = { 'v': Matrix([0, 1, -1]), # L/T 'g': Matrix([0, 1, -2]), # L/T^2 'rho': Matrix([1, -3, 0]), # M/L^3 'mu': Matrix([1, -1, -1]), # M/(L*T) 'dr': Matrix([1, -3, 0]), 'D': Matrix([0, 1, 0]), } target = Matrix([0, 1, 0]) # 深度 d 的量纲是 L # 求解 v^a1 g^a2 rho^a3 mu^a4 dr^a5 D^a6 量纲为 L 的指数约束 eqs = [] for name, vec in dims.items(): eqs.append(vec.dot(Matrix([a1, a2, a3, a4, a5, a6])) - target[ list(dims).index(name) if False else 0]) # 逐基本量纲列方程更清晰:M、L、T 三个分量的指数和要等于目标 coeff = Matrix.hstack(*dims.values()) # 3x6 量纲矩阵 sol = solve(coeff * Matrix([a1, a2, a3, a4, a5, a6]) - target, [a1, a2, a3, a4, a5, a6], dict=True) print("自由度 =", 6 - coeff.rank(), "组基解示例:", sol[:2])

六个变量、三个基本量纲,齐次方程组的解空间维数是 3——也就是说这个系统可以化成三个无量纲组合。经典结果正是如此:弗劳德数、雷诺数和相对密度差。量纲法直接告诉我们,任何正确的冲刷深度公式必然长成"无量纲数之间的函数"这个样子。物理学家说这是"量纲分析给公式定了户型",具体装修(函数形式)还得靠实验或理论。

尺度分析:扔东西的依据

量纲回答"形式对不对",尺度回答"哪项大哪项小"。规则很朴素:把每一项的典型数量级估出来,相差两个数量级以上的小项,在第一版模型里可以直接扔掉,但要在交付文档里登记"扔掉了什么、何时会失效"。

以一个电路板热传导工单为例:稳态时热平衡方程包含传导项、对流项和一个随温度变化的发热项。量级估算:

表达式(文字) 典型量级
芯片传导散热 导热率乘温差除以路径长度平方 10 的 4 次方(瓦每立方米)
表面对流散热 对流系数乘温差除以特征厚度 10 的 3 次方
发热随温升的增量 温度系数乘功率密度 10 的 1 次方

对流项比传导小一个数量级,发热增量小三个数量级。第一版模型保留传导、把对流当作边界条件、扔掉发热温升项——这是一个可以 defended 的简化。用代码把数量级比较自动化成习惯:

import numpy as np def magnitude_table(items): """items: {名称: 表达式数值},按量级排序并标出去留建议""" rows = sorted(items.items(), key=lambda kv: -abs(kv[1])) top = np.log10(abs(rows[0][1])) for name, val in rows: drop = "可忽略" if top - np.log10(abs(val)) >= 2 else "保留" print(f"{name:12s} 量级 1e{np.log10(abs(val)):.0f} {drop}") # 电路板热工单的三项量级(单位:W/m^3,代入典型参数后) magnitude_table({ "传导项": 3.2e4, "对流项": 8.1e3, "发热增量": 2.5e1, })

输出会明确标注"发热增量 可忽略"。这个表在评审会上比一句"我们做了合理简化"有说服力得多——它把简化的代价量化了。

⚠️ 常见坑:数量级接近的项绝不能凭"物理直觉"扔。对流项只比传导小一个数量级,扔掉它误差可能到 20%,而热设计工单的验收容差常常只有 10%。

💡 关键直觉:量纲分析的齐次性还提供了一个调试技巧——任何拟合出的经验公式,把输入单位从米换成毫米后重新预测,结果应当只差换算因子;如果连形状都变了,说明拟合公式里混进了带量纲的常数并隐含了特定单位。

量纲—尺度工作流

量纲—尺度工作流

本节要点回顾

  • 量纲一致性是三十秒成本的公式体检,指数错误无处遁形;
  • 巴克利法把含 n 个量、k 个基本量纲的系统压缩成 n 减 k 个无量纲组合,先定公式的"户型";
  • 尺度排序给出扔项的量化依据:差两个数量级以上才敢扔,差一个数量级要算进误差预算;
  • 简化要登记:扔掉的项、生效条件、失效条件三件套写进交付文档;
  • 换单位自检:经验公式在单位替换下只差换算因子,否则混入了带量纲常数。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U