【问题标题】:Difference between vectors and arrays in ModelicaModelica中向量和数组的区别
【发布时间】:2013-10-28 13:18:32
【问题描述】:

我注意到 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 中数组和向量之间的一些差异。如果有人帮我解决问题,我将不胜感激。

【问题讨论】:

    标签: arrays vector modelica dymola


    【解决方案1】:

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

    想象一下我们这样声明:

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

    这有帮助吗?

    【讨论】:

    • 是的,确实如此!谢谢。
    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多