Modelica:将数组 return 值分配给标量

Modelica: assign array return value to scalars

以下模型尝试将函数调用的向量 return 值分配给标量向量。如果它在方程部分内,它会检查并工作,但在算法部分内会失败。这是我正在使用的 Modelica 工具中的错误,还是我做错了什么?而且,不引入中间变量x[2]怎么写呢?

model returnVector
  Real x1;
  Real x2;
  Real x[2];
  Real A[2,2] = [1,2;3,4];
  Real b[2] = {8,7};
algorithm 
  x = Modelica.Math.Matrices.solve(A,b);
  {x1, x2} = Modelica.Math.Matrices.solve(A,b);
end returnVector;

你做错了什么:-)

方程式左边是任意表达式;所以你甚至可以写 Modelica.Math.Matrices.solve(A,b)={x1,x2};.

在算法中,左侧必须是组件引用(Modelica 3.4 中的第 11.2 节;https://modelica.org/documents/ModelicaSpec34.pdf),然后评估右侧,然后将其分配给左侧-边变量。

在 'algorithm' 下,必须使用“:=”来表示 Modelica 中的 Assignment,而不是像 C/C+ 中那样的“=” +。 所以代码可以重写如下:

model returnVector
  Real x1;
  Real x2;
  Real x[2];
  Real A[2,2] = [1, 2; 3, 4];
  Real b[2] = {8, 7};
algorithm 
  x := Modelica.Math.Matrices.solve(A, b);
  x1 := x[1];
  x2 := x[2];
  //{x1, x2} = Modelica.Math.Matrices.solve(A, b);
end returnVector;

只需将左边写在圆括号内:

({x1, x2}) := Modelica.Math.Matrices.solve(A, b);