我需要一些帮助来初始化openmodelica中的数组。我创建了一个modelica类,它应该生成一个可变大小的数组。大小将被设置为参数并且是整数类型。以下是我想要做的一个例子。我一直收到错误消息,很乐意收到任何提示!感谢。
parameter Integer f_min;
parameter Integer f_max;
Integer Freq_steigerung;
Integer array_size;
Integer Freq[:];
equation
array_size = ceil((f_max-f_min)/Freq_steigerung);
Freq[array_size] = f_min: Freq_steigerung: f_max;
答案 0 :(得分:5)
在Modelica中,运行时不能拥有可变大小的数组。 所有数组大小都需要在编译时知道,因此大小需要是参数或常量。
您可以拥有包含未知数组大小的组件的函数(或记录),但它们需要在调用时绑定(在编译期间仍然可以知道)。
这样的事情会起作用:
model T
parameter Integer f_min;
parameter Integer f_max;
parameter Integer Freq_steigerung;
parameter Integer array_size = integer(ceil((f_max-f_min)/Freq_steigerung));
Integer Freq[array_size];
equation
Freq = f_min: Freq_steigerung: f_max;
end T;
答案 1 :(得分:2)
在许多情况下,您可以使其更简单:
model T
parameter Integer f_min;
parameter Integer f_max;
parameter Integer Freq_steigerung;
Integer Freq[:]= f_min: Freq_steigerung: f_max;
end T;
答案 2 :(得分:1)
以下是有关使用functions
时适用的未知数组大小的相关答案。
当原始数组的大小未知时,可以使用size
命令,但变量需要该信息才能实例化。这种用法如下所示。
function test
input Real[:] x1;
input Real[size(x1,1)] x2;
output Real[size(x1,1)] y;
algorithm
y = x1.*x2;
end test;
答案 3 :(得分:1)
也可以仅在function
的算法部分确定数组的大小。在这里,您甚至不必显式给出数组的大小。
请参阅下面的用法。
function T
input Integer f_min;
input Integer f_max;
input Integer Freq_steigerung;
output Integer Freq[:];
algorithm
Freq := f_min:Freq_steigerung:f_max;
end T;
答案 4 :(得分:1)
如果在模型中使用了它,则必须创建一个函数来计算输出的大小,并将其作为T函数的输入(或至少在使用Dymola时):
请参阅:
package TestT
function T
input Integer f_min;
input Integer f_max;
input Integer Freq_steigerung;
input Integer n;
output Integer Frew[n];
algorithm
Frew := f_min:Freq_steigerung:f_max;
end T;
function Tc
input Integer f_min;
input Integer f_max;
input Integer Freq_steigerung;
output Integer n;
algorithm
n :=size(f_min:Freq_steigerung:f_max, 1);
end Tc;
model Test
parameter Integer n = TestT.Tc(1,3,1);
Real a[n] = TestT.T(1,3,1,n);
end Test;
end TestT;