在 Matlab 中,我怎样才能与单位保持一致?

计算科学 matlab 流体动力学 计算物理学 数值建模 造型
2021-12-23 17:32:06

我正在建模一些空气动力学方程,并使用米/厘米、千克和秒。

我听说过,“matlab 不知道单位”。那么,我怎样才能确保它确实如此呢?仅仅通过在我的所有代码中保持一致?

例如,如果我在 matlab 中以 [0 30] 的时间尺度运行 ode 求解器,我可以将其视为 matlab 为我提供“30 秒”的 ode 解决方案吗?

谢谢,

4个回答

我想说你主要有两种方法:

  1. 正如另一个答案中已经建议的那样,在您的所有代码中保持一致。为此,我总是随身携带一张这样的桌子,因为它可能真的很有用。

在此处输入图像描述

  1. 使用无量纲方程。这样,我所有的参数和变量都已经一致了。为此,我建议参考 1。

参考

  1. Langtangen、Hans Petter 和 Geir K. Pedersen。微分方程的标度斯普林格,2016。

仅仅通过在我的所有代码中保持一致?

是的,这是唯一的方法。Matlab 或任何其他编程语言不了解单位。他们只知道数字。

例如,考虑不可压缩流动。如果您以 m/sec 为单位设置速度,以米为单位的长度(如何生成网格),以牛顿/m^2 为单位的压力,以 m^2/sec 为单位的运动粘度,那么时间将以秒为单位。

您可以构建尊重单位的代码。例如,openfoam 就是这样做的。您必须定义自己的数据类型和对它们的操作。每个数据类型都应该有一个关联的单元。如果您尝试添加/减去两个不同单位的变量,程序应该会警告您。即使这样,您也有责任为这些变量设置正确的数值。假设 v 应该以 m/sec 为单位,并且您必须将其设置为 1 m/sec。如果你说 1 m/sec = 100 cm/sec 而你设置 v = 100,那将是错误的,并且没有程序可以检测到这样的错误。

您可以使用Biran 有一本名为“每个工程师都应该了解 MATLAB 和 Simulink”的书,您描述的问题是 OOP 章节中给出的示例。

简而言之,他定义了一类“physicalProperty”,其对象的属性是长度质量时间的基本单位的幂。每当创建一个值时,您必须指定每个基本单位的幂(例如,如果您要指定长度,米的幂将为 1,秒和千克的幂将为 0)。然后,定义数学运算,以便始终允许乘法/除法,从而导致属于两个操作数的不同幂的求和/减法,并且仅允许在所有单位具有相同幂的对象之间进行加法/减法(即,如果您尝试从 1s 中减去 5m 你会得到一个错误)。

如果思路清晰,实施应该不难。祝你好运!l

在研究和教学中,多采用无量纲方程。空气动力学中一种简洁的方法是将自由流值设为p=1,U=M,ρ=γ(以便a=1) 但是,如果您正在设计要制作的东西,请使用单位并注意使它们正确$