为什么我得到一个计算最大大小是没有边界的误差在仿真软件MATLAB功能块R2018b吗万博1manbetx
28日视图(30天)
显示旧的评论
MathWorks支万博1manbetx持团队
2018年12月5日
编辑:
MathWorks支万博1manbetx持团队
2022年9月29日
为什么我收到以下错误在我的仿真软件MATLAB功能块模型。万博1manbetx
错误:计算最大大小是没有边界的。
静态内存分配要求所有尺寸是有界的。
的计算大小[:?x: ?]。
参阅附上的模型产生这个错误。
接受的答案
MathWorks支万博1manbetx持团队
2022年9月7日
编辑:MathWorks支万博1manbetx持团队
2022年9月29日
错误的原因是有一个动态数组大小的MATLAB函数块取决于输入参数可调。数组的例子中“B”等于“(一)”,“一”是一个可调输入参数。因为“一个”在编译时是未知的,“B”的大小在编译时也是未知的,因此我们不能静态地分配内存“B”。即使我们定义一个最大尺寸为“B”使用“编码器。varsize”、没有保证”“要小于B的最大大小,因此错误依然存在。
这里有三个可能的解决方案可以解决这个问题:万博 尤文图斯
1。如果你不需要可调参数“A”,然后你可以“A”nontunable通过取消勾选“可调”复选框,在“端口和数据管理器”(链接)。现在我们可以在编译时检查B的大小和错误删除。
2。您还可以添加一个“断言”声明,可以用来执行“B”的最大大小,因此B将静态分配的最大大小。例如,添加以下行MATLAB函数块代码:
断言(< 10);
3所示。我们可以指定变量大小的数组是动态分配的,因此我们不需要在编译时知道他们的大小,因为他们将在运行时设置。我们可以通过打开“动态内存分配在MATLAB函数”的配置参数。也通过设置“MATLAB函数动态内存分配阈值”“0”,我们可以保证所有的变量大小的数组将动态分配的。有关详细信息,请参阅链接://www.tianjin-qmedu.com/help/万博1manbetxsimulink/ug/use-dynamic-memory-allocation-for-variable-size-arrays-in-a-matlab-function-block.html