MATLAB:矩阵的预分配产生误差

MATLAB:矩阵的预分配产生误差,matlab,Matlab,我正在写一个简单的程序来解决一个问题 该程序创建一个900 x 900的矩阵。在程序创建此矩阵c之前,我按以下方式预先分配它: c = zeros(900,900); 这将产生一条橙色错误消息:“分配给变量‘c’的值可能未使用” 稍后在程序中,矩阵c用数字填充。那么为什么会出现错误消息?当您说“橙色错误消息”时,您的意思是消息在MATLAB编辑器中吗?这是的一个输出,它试图捕获遵循语言语法但可能是错误的常见编码“错误”。c是如何被数字填满的?如果你有 c = zeros(900,900); .

我正在写一个简单的程序来解决一个问题

该程序创建一个900 x 900的矩阵。在程序创建此矩阵
c
之前,我按以下方式预先分配它:

c = zeros(900,900);
这将产生一条橙色错误消息:“分配给变量‘c’的值可能未使用”


稍后在程序中,矩阵
c
用数字填充。那么为什么会出现错误消息?

当您说“橙色错误消息”时,您的意思是消息在MATLAB编辑器中吗?这是的一个输出,它试图捕获遵循语言语法但可能是错误的常见编码“错误”。
c
是如何被数字填满的?如果你有

c = zeros(900,900);
....stuff happens...
c = myfunction();

然后,MATLAB将重新分配
c
,即使
myfunction
返回900x900矩阵。您是否已扫描代码,以确保初始声明后,
c
未被覆盖或替换?我见过M-Lint有时会搞砸,但不经常

这是一条mlint警告消息。不是真正的错误。错误将阻止代码运行。mlint警告仅仅表明了一种低效,即您的代码可能没有高效地编写

无需预先分配一个阵列,然后重新分配该阵列。事实上,你的第一份作业在这里毫无用处。随后在代码中,您将c定义为两个向量乘积的结果。因此,matlab完全忽略了您在第一步中所做的事情。因此,这一声明确实是白费力气,因此应该放弃


一般情况下,只能预先分配一个数组,稍后您将只分配该数组中的单个元素(或小组元素),可能是在一个循环中。

感谢您的回复mtrw。是的,该错误确实是一个M-lint错误。我应该用不同的措辞来回答我的问题:矩阵c是一列向量和一行向量相乘的结果。你认为在这种情况下,预分配是最优的吗?如果是,那么为什么会出现M-lint错误?Pieter你可以回去编辑你的原始问题。这将改善这个问题,即使对于那些最终没有阅读所有评论的人来说也是如此。