Modelica I/O块与函数
Modelica中的块和函数有一些相似之处和不同之处。在块中,输出变量最有可能用等式表示为输入变量,而在函数中,输出变量用赋值表示为输入变量。给定一个y=f(u)的关系,它可以用这两个概念来表示,我想知道在哪种情况下,你应该支持哪一个概念 就我个人而言Modelica I/O块与函数,modelica,Modelica,Modelica中的块和函数有一些相似之处和不同之处。在块中,输出变量最有可能用等式表示为输入变量,而在函数中,输出变量用赋值表示为输入变量。给定一个y=f(u)的关系,它可以用这两个概念来表示,我想知道在哪种情况下,你应该支持哪一个概念 就我个人而言 使用输入/输出连接器可以更好地将块集成到方框图中 对于雅可比矩阵求值所需的符号操作、优化和求值分析导数,编译器很可能更好地处理块中的方程。所以我猜在某些边界情况下,块对数值误差可能不太敏感。对于函数,如果没有明确提供导数,则可以使用有限差分方
- 使用输入/输出连接器可以更好地将块集成到方框图中
- 对于雅可比矩阵求值所需的符号操作、优化和求值分析导数,编译器很可能更好地处理块中的方程。所以我猜在某些边界情况下,块对数值误差可能不太敏感。对于函数,如果没有明确提供导数,则可以使用有限差分方法计算导数
- 另一方面,函数中的一组赋值很可能被视为一个等式。如果用块中更大的方程组表示相同的赋值集,则会产生更大的模型,可能会导致运行时性能下降
- 尽管带有算法部分的块在某种程度上等同于具有相同赋值集的函数,但函数调用的语法在两种情况下更受欢迎
- 可以建立块类型的层次结构,并完成所有面向对象建模的工作。功能有点有限。不可能从包含算法部分的非抽象函数进行扩展。但也有可能有一个抽象的功能,作为一个接口,从中可以建立实现的功能等等
上述一些参数取决于特定模拟环境处理块或函数的方式。这些可能是底层细节,不一定是已知的。您可能会对相反的内容感兴趣:像调用函数一样调用块: 使用函数语法的优点是不需要声明+连接组件:
Block b;
equation
connect(x, b.in1);
connect(y, b.in2);
connect(z, b.out1);
vs
当然,现在还不存在这种语法。如果可以的话,你真的很想用积木。算法块也可以是函数,因为它们更短、更容易编写,并且在结果文件中引入的轨迹更少(除非您想调试函数调用内部发生的情况,否则这很好)。您的“问题”中的列表已经是一个很好的总结。但仍有一些其他事项需要考虑:
这只是我的两分钱-欢迎更多意见
z = Block(x, y);