You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Modelica模型中定义无默认值的必填参数?

背景:Modelica 3.6的“Undefined modification”特性

Modelica语言3.6版本新增了Undefined modification语法,该特性允许将参数设为未定义状态,以此强制模型用户显式设置参数值。不过目前该语法仅用于通过extends关键字继承模型时,移除父类设置的参数值。

问题

看到这个新语法后,我意识到自己不清楚如何在一般情况下指定Modelica模型的参数不应有默认值(即强制模型用户必须指定参数值)。

例如,以下是一个未设置param值的简短模型:

model ParameterDefaultValue "A model with one parameter which shouldn't have a default value"
  parameter Real param "parameter which shouldn't have a default value";
equation

end ParameterDefaultValue;

即使未指定参数值,该模型仍可在OpenModelica 1.20中运行,默认使用0.0作为参数值,仅会触发一条翻译警告:[ParameterDefaultValue: 2:3-2:73]: Parameter param has no value, and is fixed during initialization (fixed=true), using available start value (start=0.0) as default value.

我更希望仿真直接失败而非仅发出警告:也就是说,ParameterDefaultValue模型无法直接仿真,必须被扩展或组合到更大的模型中才能使用,例如:

model UpperModel
  ParameterDefaultValue parameterDefaultValue(param = 1);
equation

end UpperModel;

与partial模型的关联

我发现这个需求与partial关键字的使用场景类似(对应其他面向对象语言中的抽象类),但partial存在以下区别:

  • 用于方程不足的未完全定义模型,而非参数无默认值的情况
  • “partial特性”需通过扩展模型来解决,而参数值可在实例化时提供(但实例化partial模型是被禁止的)

其他语言中的默认值

对比Python等命令式编程语言,函数参数的默认值是可选特性,而非默认行为:

def f(a, b=1):
    return a+b

f(2) # OK → returns 3
f() # fails with TypeError: f() missing 1 required positional argument: 'a'

内容的提问来源于stack exchange,提问作者Pierre H.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 08:52:35