无量纲的气球。 功利维度分析魔术


最近发表的关于哈布雷动力比空气轻的飞机垂直飞行动力学的文章促使我写了这篇短文。 我想写评论,但很快就变得越来越多,而且似乎更有用。

原始文章提供了一个计算气球或大气中气球的动力学的示例。 在这种情况下,同时考虑了空气阻力以及大气密度和温度的梯度,因此问题简化为一个非平凡的微分方程,可以使用Python语言成功地对其进行数值求解。 文章中的一切都很好:球起飞了,必要时停了下来,我们得到了最大高度和上升时间。 我花了一个时间才发射另一个球,比如说更多,更彻底地加载它,或者将氢气换成氦气-没问题-更改程序中的参数并重新计算所有内容。 该程序是可以理解的,线性的,有效的,因此如果模型不复杂,可以在这里进行哪些改进?

您可以使模型和计算变得通用,而不是用于任何特定的球,而是用于广泛的任务。 在微分方程的数值积分中可以确保最佳的计算精度。 在各种参数中进行计算时,您无需手动设置积分极限和步长。 最后,您可以在没有数值解的情况下告诉我们很多有关球飞行的动力学信息。 除此之外,还有一个长期存在的,真实可靠的技巧,曾经必须在计算机上进行任何计算并且在计算出现之前,现在是可选的,并且通常与魔术和艺术有关- 将方程式转化为无量纲的形式和自己的尺度 。 我将以航空问题为例,并说明使用此技术时问题的分析如何变得更加有意义和优雅。 然后,我将解释为什么这对程序员很重要,以及为什么本文最终出现在“函数式编程”中心。

将方程式简化为自己的尺度的本质是找到并引入这种时间,距离,质量,电流和其他尺寸变量的度量单位,其中任务采取最简单,最优雅的形式。 这种单位称为问题的特征适当尺度。 同时,显着减少了影响其解决方案的参数数量,如果您很幸运偶然发现自相似的解决方案,那么这些参数可能会完全消失!

通常,当人们研究谐波振荡器的动力学时,就会熟悉这项技术,从而使运动方程式变为规范形式。 的确,无论使用哪种振荡器(大或小,低频或高频,机械或电磁),如果您不是以秒为单位测量时间,而是以自由振荡的周期为单位,并且以米为单位而不是幅度(例如,初始偏差的大小) ,则任何线性振荡器的方程式都具有相同的形式:

X + 2 Ž Ë 一个X ' + X = 0 

研究该方程解的性质足以了解所有谐波粘滞摩擦振荡器的所有知识就足够了。 在没有摩擦的情况下,参数在问题中完全消失,因此,我们获得了一个示例正弦曲线作为解决方案。 但是,其他正弦曲线,直到简单的线性坐标变化,都是绝对相同的,因此单独分析它们是没有意义的。

分析二阶曲线时也是如此。 在检查了规范(最紧凑)形式的抛物线,双曲线或椭圆形之后,我们了解了它们的所有显着特性。 此后,该知识扩展到任何非平凡二次曲面。 此外,在分析二阶数学方程(偏导数)时,使用了相同的技术。

在物理上将问题按自己的尺度提出无量纲形式,相当于在编程中寻求规范形式或某种模式。 而且,幸运的是,它可以用完全形式化的算法表示:
  1. 我们引入变量的形式比例因子;
  2. 我们将整个方程除以具有其项维度的任何数量;
  3. 从产生的无量纲复合体(包括比例因子)中,我们选择尽可能多的因子,并将它们等同为统一;
  4. 我们通过根据问题的参数表达比例因子来求解结果方程,并使用剩余的复合物作为相似性标准。

结果,我们获得了规范形式的方程,问题的特征值,以及相似准则,用于将物理上相似的系统的解决方案概化。 您可以输入的比例越多(例如使用对称性),运动方程将越简洁,问题中保留的控制参数就越少。 对于研究人员而言,真正的宝藏是可以排除问题的所有参数,并在一条曲线中展示所有可能的解决方案的情况。 这种解称为自相似解,它们极大地简化了寿命,将偏微分方程变成了常微分方程,甚至变成了代数方程。 上述算法的第二步和第三步需要选择和推理,它们是最不正式的,但是即使您使用蛮力方法,在此阶段您也可以对问题有一个非常深刻的系统理解。

让我们看一下飞机上的文章中给出的原始运动方程,并通过其示例展示如何将其按自己的比例转换为无量纲形式。 等式的形式为:

m fracd2hdt2=mg+gW rho0ebh frac12cS rho0ebh operatorname\左 fracdhdt\右\左 fracdhdt\右2

有初始条件

h0=h0=0

在这里 h -球的高度, m -整架飞机的重量, g -重力加速度, W -球中的气体量, c -阻力系数, S -特征电阻区 ρ0 -零高度处的空气密度, b -玻尔兹曼分布中的系数。

第一步。 我们介绍时间和距离的正式量表:

h=h0y quadt=t0 tau qquad1

并使用笔划重写运动方程式以表示导数:

m frach0t20y=mg+gW rho0ebh0y left[1 fraccs2Wg frach20t20\运signyy2 right]

在我们的情况下,初始条件是微不足道的,因此可以将其省略,但是通常,我们还必须重写它们。

实际上,第二步是对方程进行测量。 其中的所有术语都具有力量的大小,我们可以自由地将它们划分为任何力量。 通常用惯性力除以距离的二阶导数。 在这种情况下,作为问题的参数,通常会获得众所周知的动态相似性准则,例如雷诺数或欧拉数。 但是在我们的任务中,我们将任务中包含的所有力分配给重力 mg 这就是为什么。 我们主要对静态平衡的位置感兴趣-静态球在给定负载能力下的最大高度及其过渡时间。 静平衡不取决于系统的惯性,而直接取决于重力。 因此,我们划分并减少了可能的结果:

 frach0gt20y=1+ fracW rho0mebh0y\左[1 fraccs2Wg frach20t20\运signyy2 right]

一切,方程都是无量纲的,现在所有变量和其中的所有项都只是数字。 现在,我们可以自由选择长度和时间的比例,以最大程度地减少任务参数的数量。 我们有两个未知数 h0t0 和四个无量纲的复合物:

 frach0gt20 quad fracW rho0m quadbh0 quad fraccs2Wg frach20t20

这意味着我们只需将它们等同为一个就可以使它们中的两个消失。 此外,第二个综合体不取决于大规模因素,我们需要选择剩下的两个进行破坏。 再一次,我们转向关于我们感兴趣的静态均衡的争论。 平衡位置是由零加速度的均衡确定的,也就是说,对我们而言,哪个因子位于高度的二阶导数上并不重要,我们可以使方程右边的参数数量最小化。 因此,我们得出以下解决方案:选择比例因子,以使我们列出的复合物的第三和第四部分从方程中消失。 为此,我们假设

bh0=1 quad fraccs2Wg frach20t20=1

得到我们自己的问题规模:

h0= frac1b quadt0= frac1b sqrt fraccs2Wg qquad2

其余参数表示如下:

 frach0gt20= frac1 gamma quad fracW rho0m=B

这可能是我们转型中最神奇的阶段,最接近艺术。 但是经验和一些推理有助于选择合适的比例尺。 然后,同样的经历使我们能够在不同的科学领域看到相似的现象,并猜测复杂系统的特征。

我将自己推迟对我们获得的秤和参数的物理意义的分析,尽管这也非常令人愉快和有趣,但是我将立即转向最美味的-自行量纲的无量纲方程式:

 frac1 gammay=Bey\左1\运signyy2\右1 quady0=y0=0. qquad3

在这里! 我准备解决这样一个方程式,进行数值分析和积分。 当我决定时,我可以轻松地从比例(1)和(2)编码的刻度转换为米和秒。

因此,让我们开始吧。 首先,让我们找到广义气球的停止位置。 为此,我们将等式(3)中的速度和加速度都设为零:

0=Bey1

我们从哪里得到

y= lnB.

立即得出结论:为了使最大高度存在,条件 B>1 。 接下来,我们估计球将达到该高度的时间。 为此,我们将加速度等于零并解决一阶柯西问题:

0=Beey\左1y2\右1 quady0=y

它通过变量分离的方法解析地求解,并简化为整数:

 tau= inty0 fracBdy sqrtBey=2 operatornamearth left sqrt1 frac1B\对

看,这就是-正确选择音阶的成果! 最大高度及其实现的特征时间仅通过参数表示 B 。 这意味着我们可以修复一些价值 B>1 ,构造一系列图以解决方程式(3)中的不同值 \伽 从而立即描述解决 任何价值 问题的所有选项 B

这是一个通用的单参数解决方案族,通过对各个值的问题(3)进行数值积分获得 \伽


达到平衡高度后,球囊会产生阻尼振荡一段时间,但是,正确估算了达到该高度所需的特征时间。 从标准 \伽 仅取决于振荡周期及其衰减时间。 该参数越大,我们的系统越“坚固”。

只需将沿轴的值乘以相应的比例因子,就可以将此图系列转换为尺寸视图。 现在数值实验已经结束,其结果已具有普遍意义。 您可以替换任务的实际尺寸参数,并立即以米和秒为单位获取轴上的数字! 这样的结果已经可以发表在严肃的气球爱好者手册上,也可以发表在一张描述整个现象的科学文章中。

现在,让我们看看以参数和变量的形式得到的结果。 更换球的质量 m 总气体质量 W rhog 和有效载荷质量 M

m=W rhog+M=W rhog1+ alpha

在哪里  alpha= fracMW rhog -飞机的相对承载能力。 此外,我们将球取为球形,并通过半径表示其面积和体积 R 。 在这种表示形式中,我们得到了问题的参数:

B= frac rho0 rhog1+ alpha gamma= frac3cB8Rb

第一个是浮力系数,它取决于所使用的气体和所举起的负载,这是一个非常重要的参数,它包括所有质量。 第二个图显示了球的大小和形状与大气中的密度梯度之间的关系,即,大气不均匀性相对于球的大小有多大。

量表表示如下:

h0=1/b tau0= frac12b sqrt frac3cB2gR= sqrt frac gammagb

距离比例仅由密度梯度确定。 这是绝对正确的,因为正是由于这种梯度,球的上升通常停止在某处。 特征时间包括动态量-重力加速度,质量比和空气阻力。

球接近的特征高度和时间

h=yh0= frac1b lnBt= taut0=2 sqrt frac gammagb\操arth\左 sqrt1 frac1B right

还以任务的主要参数和范围表示。

例如,让我们看看原始文章中给出的物理参数会发生什么:

B=4.57\伽=686h0=8000 m tau0=12.47 minh=12166.6 mt=13.72 min



总结一下。 在将任务提交给机器之前,在纸上做了一些工作之后,我们能够获得更清晰,通用的结果,并且注意到了该解决方案的最重要特性。 同时,我们并没有失去解决方案的“模块化”。 这就是我的意思。 我们用最笼统的术语表述了这个问题,然后,在已经获得解决方案的情况下,我们开始添加新的“功能”,例如,我们分享了有效负载的概念以及提升它的气体质量。 这种复杂性影响了标度值,但没有改变解决方案的性质。

如果随后需要添加温度梯度,则该指数中的表达式将变得更加复杂,但其本质以及最重要的是,比例将保持不变:

 exp left fracbhT0T0ah right

尺寸确定后,它将如下所示:

 exp left fracy1 psiy right

新参数在哪里  psi=\压abT0 显示了密度和温度梯度之间的相关性。 由于这些是独立于我们的大气参数,  psi 等于 0.17 。 顺便说一下,该常数的值显示了温度梯度效应的重要性,它并不大,但不可忽略。 图族将稍有变化,但最重要的是,它将保持一个参数。

使用问题自己的标度进行计算还有另一个显着的优点:在这种情况下,变量通常采用“中等”值,即接近于1。 这对于浮点计算非常有用:数值在数量级上变化很大的操作中,精度不会丢失。 另外,通过比较相似性标准的值或变量的值,可以正确比较任务中各个效果的作用。 例如,值 B=4.5 表示与大气相互作用的力大于重力的次数。 而特征无因次上升速度的平方 y/ tau2 sim0.3 图中显示了相对于浮力,航空器在垂直运动中空气阻力的重要程度,用括号中的单位表示。

最后,无量纲变量和参数的计算具有一定的内部一致性,因为微分方程的解几乎总是超越性的,只有无量纲的量可以作为其参数和结果。 该计算机还专门处理数字-无量纲的数量。 原则上,静态类型允许您在类型级别输入物理量的维数,并在编译期间检查程序的正确性,但是在数字阶段,我们仍然仅处理量本身。 与单位和尺寸相关的任何错误都会在此类计算中丢失。 合理地准备要进行计算的任务(排除多余的任务),只保留最基本和最自然的求解器。

如果我们选择其他复合体,或者将所有力都不归因于重力,而是归因于惯性,将会发生什么? 方程中将保留两个参数,但是曲线族将变为两参数,并且无法在一张图中显示。 我承认,起初这只是发生在我身上,因为我的身高比例得到了球的半径。 但是在玩完这些曲线之后,我看到了它们的几何相似性(在所有抛物线中都看到了),并且对所获得的标准和方程式进行了进一步的粗略分析,使我发现了隐藏的对称性,并提出了方程式的“规范形式”应该是什么。 但是,这是一个美丽的职业! 任务本身开始讲述自己。 我感到很高兴在Haskell或C#中的程序中构建类型和数据结构系统:当程序的体系结构与任务的内部结构相对应时,一切都变得异常自然,优雅,特殊情况得以``自动''解决,并且抽象层的数量减少了。

物理量本身的尺寸非常有趣。 它们形成线性空间,并且对相似性标准的搜索可以简化为在维空间中找到核的问题,从而使该过程正式化。 它们在某种程度上发挥了物理计算中类型的作用。 由于编译器使用静态类型验证程序的正确性,因此物理学家使用尺寸来验证其计算和结果。就像在严格规范的纯函数语言中一样(例如,在Haskell中),可以从其类型派生功能代码,以相同的方式,基于物理量的维数,人们可以在物理系统中构造无量纲的复数,特征量并获得极其有用和通用的结果。在力学,气体和热力学,量子力学等方面有很多例子。我建议您熟悉一下出色的著作,其中提供了许多美丽的示例,这些示例将维度分析应用于从毕达哥拉斯定理到恒星振动和天空中瑞利散射的问题。该作品引用了约翰·惠勒(John Wheeler)的话,他的老师理查德·费曼(Richard Feynman)的名字叫“惠勒规则”。
« , . : (! ! !) , ; . : , . , . . ».

程序员的建议听起来很耳熟:在未确定函数签名(类型)和行为(测试)之前,不要开始编写函数代码。在编写代码之前,您应该考虑类型,数据结构及其关系。这正是OOP和函数式编程的强项-这些原理不仅在这里起作用,而且,如果熟练地使用它们,它们本身会提供最自然,最优雅的解决方案,而对于FP,他们在较深的数学层面上做到了这一点,从而有可能证明程序的性能并收取一定的费用将程序属性输出到编译器的工作。

学习数学,编程精美,玩得开心!

Source: https://habr.com/ru/post/zh-CN416151/


All Articles