如何解决“维度大小不相等,目标数组不灵活”
当我从我的“主模型”调用这个函数时,它产生了预期的结果,但是当我从另一个函数调用它时,保存、“测试”和编译工作正常,但在“模拟”时我收到以下错误消息:“维度大小不相等,目标数组不灵活”
该函数反转/“翻转”长度为 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 举报,一经查实,本站将立刻删除。