微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“维度大小不相等,目标数组不灵活”

如何解决“维度大小不相等,目标数组不灵活”

当我从我的“主模型”调用这个函数时,它产生了预期的结果,但是当我从另一个函数调用它时,保存、“测试”和编译工作正常,但在“模拟”时我收到以下错误消息:“维度大小不相等,目标数组不灵活”

函数反转/“翻转”长度为 n 的向量,以便最后一个元素先出现。

function myReverse
  input Integer n; 
  input Real[n] v; //  "Real vector";
  output Real[n] result; // "Elements of vector v in reversed order";

algorithm

  result := vector({v[end - i + 1] for i in 1:n});

end myReverse;

解决方法

这很奇怪。我假设您没有使用 Dymola,因为您提供的代码适用于 Dymola 2021x。

我使用了以下测试,模拟模型“Test”:

package ReversePackage
  function myReverse
    input Real[n] v;       //  "Real vector";
    output Real[n] result; // "Elements of vector v in reversed order";

  protected 
    Integer n=size(v,1);

  algorithm 
    result := vector({v[end - i + 1] for i in 1:n});

  end myReverse;

  model Test
    extends Modelica.Icons.Example;
    Real out[2];

  equation 
    out =ReversePackage.myReverse({time,1});
  end Test;
end ReversePackage;

额外说明:我通过读取输入向量的大小来简化 myReverse,而不是将大小作为传递给函数的参数。

只是一个“疯狂的猜测”,但我可以想象,end 运算符会导致问题,请尝试将其替换为 n,这应该不是问题,因为您已经有了它。正如马可指出的那样,不必要的 vector() 也可能导致问题。所以也尝试删除它。下面实施了两项更改:

function myReverse
  input Real[n] v;       //  "Real vector";
  output Real[n] result; // "Elements of vector v in reversed order";
 
protected 
  Integer n=size(v,1);

algorithm 
  result := {v[n- i + 1] for i in 1:n};

end myReverse;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。