1
我正在使用openmodelica,我试图通过数组循环,以便找到最大值。我能够将我的代码减少到一个非常简单的测试用例,但仍然会导致错误。这是我做错了什么,或者这是openmodelica中的错误?这是一个非常简单的情况,确实会给出错误:通过modelica阵列循环失败
package TestLoop
model ItemA
Real p;
end ItemA;
model ItemB
ItemA a[n];
parameter Integer n = 5;
Real p;
equation
for i in 1:n loop
a[i].p = time;
end for;
algorithm
for i in 1:n loop
p := a[i].p;
end for;
end ItemB;
end TestLoop;
问题出在我的算法部分。这里是我得到的错误:
TestLoop.ItemB.c:155:13: warning: implicit declaration of function '$Pa$lB' is invalid in C99 [-Wimplicit-function-declaration]
$Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
^
TestLoop.ItemB.c:155:20: error: unexpected type name 'modelica_integer': expected expression
$Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
^
1 warning and 1 error generated.
任何建议,为什么这可能是,或者我如何解决它?如果我用一个固定值替换赋值,p:= a [1] .p;代码确实运行(尽管这对我没有用处)。我最终想要在算法部分中做的是找到[n] .p的最大值,其中我有一个公式部分,可以对项目数组进行有用的计算。
在第10.3.4节中还描述了Modelica规范的缩减函数和运算符:https://www.modelica。 org/documents/ModelicaSpec33.pdf#page = 113 – matth
我也在寻找max的索引。你的建议也为我指出了正确的方向。 '型号ItemC ItemA a [n]; 参数整数n = 5; Real p; 整数n2; Real p2 [n]; 等式 for i in 1:n loop a [i] .p = time/i; 结束为; 算法 p2:= vector(a.p); n2:= 0; p:= 0; for i in 1:n loop if if [i]> p then n2:= i; p:= p2 [i]; end if; 结束为; end ItemC;' – Adam