出现此错误是因为您试图用比其大小更多(或更少)的值填充变量块。换句话说,你有一个声明A(:)=B
在哪里size(A(:))
不同于size(B)
.
在问题的例子中,rand(3)
返回一个3x3
然而,矩阵output(ii)
只是一个单一的值(即使output
可能会更大,output(ii)
只是一个单一的值output
),因此返回的值rand(3)
不适合里面output
.
为了解决这个问题,需要改变尺寸output
变量,因此您有空间来容纳所有结果。
有两种方法可以做到这一点。其中之一是创建一个Matrix适合回报,例如output=zeros(3,3,10)
.
然后我们可以将代码更改为
for ii= 1:10
output(:,:,ii)=rand(3);
end
或者,您可以填写output
as a 单元阵列。当函数的返回值每次改变大小时,这特别有用,例如rand(ii);
在这种情况下,以下内容将起作用
for ii= 1:10
output{ii}=rand(ii);
end
与问题中的示例不同,在实际情况下,您可能不知道输出返回的大小,因此您不知道使用两个选项中的哪一个来修复代码。
可能的学习方法是,在代码错误时激活调试帮助,方法是输入dbstop if error
在你的命令行中。当 MATLAB 抛出错误时,这将触发调试停止,您可以输入size(rand(ii))
and size(output(ii))
查看两者的尺寸。
通常,阅读所使用函数的文档也有帮助,看看是否可以使用不同的大小。
也就是说,第二个选项,单元阵列,将始终确保一切都适合。然而,矩阵通常在 MATLAB 中更快、更容易使用,因此如果可以的话,您应该瞄准基于矩阵的解决方案。