我正在建模一些空气动力学方程,并使用米/厘米、千克和秒。
我听说过,“matlab 不知道单位”。那么,我怎样才能确保它确实如此呢?仅仅通过在我的所有代码中保持一致?
例如,如果我在 matlab 中以 [0 30] 的时间尺度运行 ode 求解器,我可以将其视为 matlab 为我提供“30 秒”的 ode 解决方案吗?
谢谢,
我正在建模一些空气动力学方程,并使用米/厘米、千克和秒。
我听说过,“matlab 不知道单位”。那么,我怎样才能确保它确实如此呢?仅仅通过在我的所有代码中保持一致?
例如,如果我在 matlab 中以 [0 30] 的时间尺度运行 ode 求解器,我可以将其视为 matlab 为我提供“30 秒”的 ode 解决方案吗?
谢谢,
我想说你主要有两种方法:
参考
仅仅通过在我的所有代码中保持一致?
是的,这是唯一的方法。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
在研究和教学中,多采用无量纲方程。空气动力学中一种简洁的方法是将自由流值设为(以便) 但是,如果您正在设计要制作的东西,请使用单位并注意使它们正确$