我在写一个简单的MATLAB程序来解决project Euler问题。MATLAB:预分配矩阵产生错误
程序创建一个900 x 900矩阵。创建该矩阵c
由程序之前,我以下列方式预先分配它:
c = zeros(900,900);
这产生一种橙色错误消息:“分配给变量‘C’的值可以是未使用”。
在程序后面的矩阵c
填充数字。那么为什么错误信息呢?
我在写一个简单的MATLAB程序来解决project Euler问题。MATLAB:预分配矩阵产生错误
程序创建一个900 x 900矩阵。创建该矩阵c
由程序之前,我以下列方式预先分配它:
c = zeros(900,900);
这产生一种橙色错误消息:“分配给变量‘C’的值可以是未使用”。
在程序后面的矩阵c
填充数字。那么为什么错误信息呢?
这是一个mlint WARNING消息。不是真的一个错误。一个错误会阻止你的代码运行。 mlint警告仅仅表明效率低下,您的代码可能无法有效写入。
没有必要预先分配一个数组,然后再重新分配。事实上,你的第一项任务在这里没用。之后在你的代码中,你将c定义为两个向量乘积的结果。因此,matlab完全忽略了你在第一步中做了什么。所以这个声明确实被浪费了,因此应该放弃。
通常,只需预先分配一个数组,您稍后可以仅在该循环中分配该数组的单个元素(或小组元素)。
当你说'橙色错误信息',你的意思是这条消息是在MATLAB编辑器?这是M-Lint的输出,它试图捕捉符合语言语法的常见编码“错误”,但可能是错误。 c
如何填写数字?如果您有类似
c = zeros(900,900);
....stuff happens...
c = myfunction();
MATLAB将重新分配c
即使myfunction
返回一个900x900矩阵。您是否扫描了代码以确保在初始声明后c
没有被覆盖或替换?我曾经见过M-Lint有时会搞砸,但并不经常。
感谢您的回复mtrw。 是的,错误确实是M-lint错误。 我应该以不同的方式表达我的问题:矩阵c是列向量和行向量相乘的结果。 在这种情况下,您认为预配置是否最优?如果是,那么为什么M-lint错误? Pieter – Pieter 2010-02-23 09:23:39
你可以回去编辑你原来的问题。即使对于那些最终没有阅读所有评论的人来说,这也会改善这个问题。 – MatlabDoug 2010-02-24 14:56:03
谢谢彼得,很清楚。 – Pieter 2010-02-24 07:01:32