为了账号安全,请及时绑定邮箱和手机立即绑定

在Matlab中使用i和j作为变量

/ 猿问

在Matlab中使用i和j作为变量

慕仙森 2019-05-23 11:05:37

在Matlab中使用i和j作为变量

i并且j是非常流行的变量名称(参见例如,这个问题这个)。

例如,在循环中:

for i=1:10,
    % do something...end

作为矩阵的索引:

mat( i, j ) = 4;

为什么不应该他们作为在Matlab的变量名?


查看完整描述

3 回答

?
慕慕森

因为ij都是表示虚构单位的函数:

所以变量调用ij将覆盖它们,可能会默默地破坏执行复杂数学的代码。

可能的解决方案包括使用iijj作为循环变量,或者使用1i何时i需要表示虚构单元。


查看完整回答
反对 回复 2019-05-23
?
喵喔喔

最好避免ij变量,以防止混淆它们是变量或虚构单位。

然而,就个人而言,我经常使用ij作为变量作为短循环的索引。为了避免我自己的代码中的问题,我遵循另一个关于i和的好习惯j不要用它们来表示虚数。实际上,Matlab自己的文档说明

对于速度和改进的鲁棒性,可以取代复杂的ij通过1i

因此,由于潜在的冲突,我不是避免使用两个非常常用的变量名,而是明确假想的数字。它还使我的代码更清晰。1i我知道的任何时候,我知道它代表sqrt(-1)因为它不可能是一个变量。


查看完整回答
反对 回复 2019-05-23
?
慕妹3242003

在旧版本的MATLAB中,曾经有一个很好的理由避免使用ij作为变量名称 - 早期版本的MATLAB JIT不够聪明,无法判断您是将它们用作变量还是虚构单元,因此关闭许多其他可能的优化。

因此,您的代码将变慢刚才的非常存在ij作为变量,如果你改变他们到别的东西将加快。这就是为什么,如果你阅读了很多MathWorks代码,你会看到iijj使用相当广泛的循环索引。有一段时间,MathWorks甚至可能会非正式地建议人们自己这样做(尽管他们总是正式建议人们为优雅/可维护性而不是当前JIT所做的任何事情,因为它是每个版本的移动目标)。

但那是很久以前的事了,而现在它有点像一个“僵尸”问题,实际上并不像许多人想象的那么重要,但拒绝死亡。

在任何最新版本中,无论是否使用ij作为变量名称,它都是个人偏好。如果您使用复杂数字进行大量工作,您可能希望避免ij作为变量,以避免任何小的潜在混淆风险(尽管您也可能/只想使用1i1j更少混淆,以及更好的性能)。

另一方面,在我的典型工作中,我从不处理复杂的数字,如果我随意使用ij作为循环索引,我发现我的代码更具可读性。


我在这里看到很多答案说不建议......不说谁在做那个推荐。以下是MathWorks实际建议的范围,来自当前版本的文档i

由于我是一个函数,它可以被重写并用作变量。但是,如果您打算在复杂算术中使用它们,最好避免使用i和j作为变量名。[...]为了提高速度和提高稳健性,您可以将复杂的i和j替换为1i。


查看完整回答
反对 回复 2019-05-23

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信