shi*_*ilu 7 modelica openmodelica
方程式部分:声明式
算法部分:非声明性
任何人都可以帮助我举例说明这两个部分之间的区别.什么时候使用什么部分?
-谢谢
Mic*_*ler 16
algorithm截面和equation截面之间的主要区别在于截面中的每个方程equation用于模拟模型.对于一个algorithm部分,您必须具有必要的赋值语句.这意味着您可以覆盖先前作业的影响.作为一个具体的例子,在equation下一节中:
equation
a = b;
a = c;
Run Code Online (Sandbox Code Playgroud)
有两个方程式.每个都将被使用.另一方面,如果我有以下algorithm部分
algorithm
a := b;
a := c;
Run Code Online (Sandbox Code Playgroud)
第二个任务总是否定第一个任务.
但是,让我添加一些"大图片"来帮助您理解真正的语义差异.你可以把它想象algorithm成一个黑盒子.一堆信息进来,某些变量被分配给.两者之间发生的事情并不重要.考虑以下算法:
algorithm
sum := 0;
prod := 1;
for i in 1:10 loop
sum := sum + x[i];
prod := prod * x[i];
end for;
Run Code Online (Sandbox Code Playgroud)
双方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;
Run Code Online (Sandbox Code Playgroud)
...甚至...
equation
sum = 1+2+3+4+5+6+7+8+9+10;
prod = 1*2*3*4*5*6*7*8*9*10;
Run Code Online (Sandbox Code Playgroud)
但同样不适用于equation部分.如果我在一equation节中这样做:
equation
sum = 0;
for i in 1:10 loop
sum = sum + i;
Run Code Online (Sandbox Code Playgroud)
我有一个严重的问题,因为这将扩展到11个方程式:
equation
sum = 0;
sum = sum + 1;
sum = sum + 2;
...
sum = sum + 10;
Run Code Online (Sandbox Code Playgroud)
所以我有一个变量和11个方程式!那不是我们想要的.
因此,总而言之,algorithm您可以忽略算法中发生的事情,只关注分配值的内容.分配一个值的次数无关紧要,它仍然算作该变量的一个"等式".对于一个equation部分,每个等式都会持续存在.
PS - 当Modelica工具执行方程排序时,我很确定语义规定算法被视为单个块.我猜这对你来说没什么意义.但随着您对Modelica的了解越来越多,您会发现这对性能有害.因此,如果可以equation的algorithm话,Modelica中的一般规则总是使用.因此,您的模拟速度会更快.
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |