gpt4 book ai didi

instantiation - 无效的 Modelica 模型在另一个模型中实例化时工作正常。为什么?

转载 作者:行者123 更新时间:2023-12-04 03:45:59 25 4
gpt4 key购买 nike

我有 2 个 Modelica 模型:

model parent
child dingus;
equation
dingus.a = 37;
dingus.c = 666;
end parent;

model child
Real a;
Real b;
Real c;
equation
a^3 + b^3 + c^3 = 1;
end child;

当我检查代码时,parent 检查正常,但是 child 给出了关于未知数和方程不匹配的错误,正如预期的那样。为什么它在 parent 中工作,是否有更清晰的最佳实践方法来实现它?我想在多个不同的 parent 中使用 child,我可能想改变我与它的交互方式,所以我不想过度定义它。

最佳答案

嗯,应该清楚 child 不是平衡的,因为正如您所指出的,它没有与未知数相同数量的方程。 parent 模型是可以的,因为它确实具有与未知数相同数量的方程。它从 child 获得一个方程式,并提供自己的两个方程式。由于只有三个变量 child.achild.bchild.c,所以整个事情是平衡的。

但更大的问题(我认为这是您想要解决的问题)是如何避免 child 看起来像“坏”模型的问题。一个简单的解决方案是:

model child
input Real a;
output Real b;
input Real c;
equation
a^3 + b^3 + c^3 = 1;
end child;

这传达了这样的想法,即 ac 的值将来自“外部”某处。

预测你的下一个问题......“但是当我想指定 bc 并求解 a 时会发生什么? 当然,我不必编写另一个具有相同方程和变量但具有不同变量的 inputoutput 限定符的模型?”

您可以毫无问题地使用上述模型。原因是 inputoutput 限定词只限制事物如何连接。我们实际上没有建立任何联系,所以我们没事。因此,您可以为 output 提供方程式并求解 input。虽然这看起来有点违反直觉,但这在 Modelica 中是完全合法的。 inputoutput 在这里有用的原因是它们隐含地指定了我们期望这个模型本身提供多少方程(输出)以及我们期望来自多少方程外部(输入)。但它们不会(也不能)限制我们为哪些变量提供显式方程。

最后一点,我建议您在声明中为 child 实例添加方程式。我似乎记得在确定某物是否平衡时,Modelica 中有一些特殊规则来处理这个问题。据我所知,解决这个问题的正确方法是:

model child
input Real a;
input Real b;
output Real c; // A bit arbitrary which one is output
equation
a^3 + b^3 + c^3 = 1;
end child;

model parent
child dingus(a=37, c=666);
end parent;

通过这种方式,您可以将 child 视为一个“命名方程式”。更好的是,您可以将其设为 replaceable,这样您就可以将其替换为其他代码。它的典型应用是用一个状态方程代替另一个状态方程,或者用一个平衡条件代替另一个。

希望对您有所帮助。

关于instantiation - 无效的 Modelica 模型在另一个模型中实例化时工作正常。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com