Arrays 初始化modelica中大小未知的数组

Arrays 初始化modelica中大小未知的数组,arrays,modelica,Arrays,Modelica,我需要一些帮助来初始化openmodelica中的数组。我创建了一个modelica类,它应该生成一个大小可变的数组。大小将设置为参数,类型为整数。下面是我想做的一个例子。我不断地收到错误信息,很乐意收到任何提示!谢谢 parameter Integer f_min; parameter Integer f_max; Integer Freq_steigerung; Integer array_size; Integer Freq[:]; equation array_size = ceil(

我需要一些帮助来初始化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;

在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;

下面是有关使用
函数时适用的未知数组大小的相关答案

当原始数组的大小未知但变量需要该信息才能实例化时,可以使用
size
命令。这种用法如下所示

function test
    input Real[:] x1;
    input Real[size(x1,1)] x2;

    output Real[size(x1,1)] y;
algorithm
    y = x1.*x2;
end test;

也可以仅在
函数
的算法部分确定数组的大小。在这里,您甚至不必显式地给出数组的大小

请参阅下面的用法

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;

如果在模型中使用此函数,则必须创建一个函数来计算输出的大小,并将其作为T函数的输入(或至少在使用Dymola时):

见:


在许多情况下,您可以使其更加简单:

model T
  parameter Integer f_min;
  parameter Integer f_max;
  parameter Integer Freq_steigerung;
  Integer Freq[:]= f_min: Freq_steigerung: f_max;
end T;

它起作用了。事实上,方程外的初始化也有效。你的代码中有一个错误,Freq应该是Frewsry,因为我输入了错误。。。我修好了
model T
  parameter Integer f_min;
  parameter Integer f_max;
  parameter Integer Freq_steigerung;
  Integer Freq[:]= f_min: Freq_steigerung: f_max;
end T;