Modelica - 迭代器有异常?

jan*_*ter 4 modelica

稍微概括的例子:

当我定义模型方程时,如何创建一个有异常的 for 循环?

以下工作:

  model Test
     Real[9] q;
  equation
     q[2] = 1.2;
     q[4] = 1.4; 
     for i in {1,3,5,6,7,8,9} loop
        q[i] = 0;
     end for;
  end Test;
Run Code Online (Sandbox Code Playgroud)

但我更愿意写一些类似的东西:

  model Test
     Real[9] q;
  equation
     q[2] = 1.2;
     q[4] = 1.4;
     for i in 1:9 and not in {2,4} loop
        q[i] = 0;
     end for;
  end Test;
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Mar*_* A. 5

这应该是可能的,只要您确保每个未知数都有一个等式。

可能不是完美的解决方案,但实际上非常可读:

model LoopException
  Real[9] q;
equation 
  q[2] = 1.2;
  q[4] = 1.4; 
  for i in 1:9 loop
    if Modelica.Math.Vectors.find(i, {2, 4}) == 0 then
      q[i] = 0;
    end if;
  end for;
end LoopException;
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您也可以尝试编写一个“带迭代器的数组构造函数”(Modelica Language Spec. Sec. 10.4.1),但这可能会有点混乱......