方程式部分:声明式
算法部分:非声明性
任何人都可以通过示例来帮助我,这些示例显示了这两个部分之间的区别。何时使用哪个部分?
-Thanks
答案 0 :(得分:12)
algorithm
部分与equation
部分之间的主要区别在于equation
部分中的每个等式都用于模拟模型。使用algorithm
部分,您可以使用命令式的赋值语句。这意味着您可以覆盖先前作业的影响。作为一个具体的例子,在以下equation
部分中:
equation
a = b;
a = c;
有两个方程式。每个都将被使用。另一方面,如果我有以下algorithm
部分
algorithm
a := b;
a := c;
第二项任务总是否定第一项。
但是,让我添加一些“大图”来帮助您理解真正的语义差异。您可以将algorithm
视为黑匣子。一堆信息进来,某些变量被分配给。两者之间发生的事情并不重要。请考虑以下算法:
algorithm
sum := 0;
prod := 1;
for i in 1:10 loop
sum := sum + x[i];
prod := prod * x[i];
end for;
sum
和prod
都分配了多次。但最后,所有这些实际上都与:
algorithm
sum := 1+2+3+4+5+6+7+8+9+10;
prod := 1*2*3*4*5*6*7*8*9*10;
......甚至......
equation
sum = 1+2+3+4+5+6+7+8+9+10;
prod = 1*2*3*4*5*6*7*8*9*10;
但这同样适用于equation
部分。如果我在equation
部分执行此操作:
equation
sum = 0;
for i in 1:10 loop
sum = sum + i;
我有一个严重的问题,因为这会扩展到11个等式:
equation
sum = 0;
sum = sum + 1;
sum = sum + 2;
...
sum = sum + 10;
所以我有一个变量和11个方程式!那不是我们想要的。
因此,总而言之,使用algorithm
,您可以忽略算法中发生的事情,只关注分配值的内容。分配一个值的次数无关紧要,它仍然算作该变量的一个“等式”。使用equation
部分,每个等式都会持续存在。
P.S。 - 当Modelica工具执行方程排序时,我很确定语义规定算法被视为单个块。我猜这对你来说没什么意义。但是当您了解有关Modelica的更多信息时,您会发现这对性能有害。因此,如果可以的话,Modelica中的一般规则始终使用equation
而不是algorithm
。因此,您的模拟速度会更快。