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);
以下模型尝试将函数调用的向量 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);