2010-02-23 125 views
2

我在写一个简单的MATLAB程序来解决project Euler问题。MATLAB:预分配矩阵产生错误

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

c = zeros(900,900); 

这产生一种橙色错误消息:“分配给变量‘C’的值可以是未使用”

在程序后面的矩阵c填充数字。那么为什么错误信息呢?

回答

6

这是一个mlint WARNING消息。不是真的一个错误。一个错误会阻止你的代码运行。 mlint警告仅仅表明效率低下,您的代码可能无法有效写入。

没有必要预先分配一个数组,然后再重新分配。事实上,你的第一项任务在这里没用。之后在你的代码中,你将c定义为两个向量乘积的结果。因此,matlab完全忽略了你在第一步中做了什么。所以这个声明确实被浪费了,因此应该放弃。

通常,只需预先分配一个数组,您稍后可以仅在该循环中分配该数组的单个元素(或小组元素)。

+0

谢谢彼得,很清楚。 – Pieter 2010-02-24 07:01:32

3

当你说'橙色错误信息',你的意思是这条消息是在MATLAB编辑器?这是M-Lint的输出,它试图捕捉符合语言语法的常见编码“错误”,但可能是错误。 c如何填写数字?如果您有类似

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

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

+0

感谢您的回复mtrw。 是的,错误确实是M-lint错误。 我应该以不同的方式表达我的问题:矩阵c是列向量和行向量相乘的结果。 在这种情况下,您认为预配置是否最优?如果是,那么为什么M-lint错误? Pieter – Pieter 2010-02-23 09:23:39

+0

你可以回去编辑你原来的问题。即使对于那些最终没有阅读所有评论的人来说,这也会改善这个问题。 – MatlabDoug 2010-02-24 14:56:03