我注意到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中数组和向量之间的某些差异。如果有人帮助我解决这个问题,我将不胜感激。
答案 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]);
这有帮助吗?