4

我在 Modelica 库 (Modelica.Blocks.Continuous.TransferFunction) 的传递函数块中注意到以下行:

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

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

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

导致同样的结果?

我在 Modelica Language Specification 3.2 中找到了以下解释,但它并没有真正帮助:

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

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

4

1 回答 1

4

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

想象一下,我们声明了这样的内容:

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

编译器查看这个并自动找到具有 a 的维度,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]);

这有帮助吗?

于 2013-10-28T18:32:55.207 回答