Modelica中矢量和数组之间的差异

时间:2013-10-28 13:18:33

标签: arrays vector modelica dymola

我注意到Modelica库中的传输功能块中的以下行(Modelica.Blocks.Continuous.TransferFunction):

parameter Real bb[:] = vector([zeros(max(0,na-nb),1);b]);

我不明白“vector”函数调用的作用,以及为什么它甚至是必要的。不会

parameter Real bb[:] = [zeros(max(0,na-nb),1);b];

导致相同的结果?

我在Modelica语言规范3.2中找到了以下解释,但它并没有真正帮助:

“vector(A) - 如果A是标量,则返回1向量,否则返回包含数组所有元素的向量,前提是最多只有一个维size > 1。”

我假设整个故事是基于Modelica中数组和向量之间的某些差异。如果有人帮助我解决这个问题,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

简单回答:向量是一维数组。

想象一下,我们宣布了这样的事情:

Real x[1,5,1,1];

这个东西中不只有5个元素,它们都包含在同一个维度中。那么如果我们想将它转换为5个元素的简单向量呢?我们可以这样做:

Real y[5] = { x[1,i,1,1] for i in 1:5 };

但这很乏味。替代方案是:

Real y[5] = vector(x);

编译器会查看此内容并自动查找具有size>1的维度,然后将所有元素作为向量拉出。

只是为了解决你提出的一点,这是无效的:

Real z[5] = [1,2,3,4,5];

因为左侧是矢量(一维)而右侧是阵列。通常情况下,如果您想使用右侧,则左侧必须是:

Real z[1,5] = [1,2,3,4,5];

如果要将其填充到矢量中,则需要将右侧从数组转换为矢量,即

Real z[5] = vector([1,2,3,4,5]);

这有帮助吗?