Julia嵌套for循环返回异常结果,请求问题排查
问题原因分析:意外重载减法运算符导致的异常结果
这是一个典型的变量名拼写错误引发的运算符重载陷阱,具体原因如下:
关键错误点
看你代码里的变量声明部分:
#declaration of variables dij_sum = sum(dij) t_end_max = 0. t-arrive_min = 10000. # 这里是问题根源 risetime_max = 0.0
在Julia中,-是二元减法运算符,而非变量名的组成部分。这行代码被Julia解析为:重载二元减法函数,强制让它返回10000.0,而不是定义一个名为t-arrive_min的变量。你原本应该用下划线命名变量(比如t_arrive_min),却误用了减号。
为什么两种赋值结果不同?
- 当你写
delay[i,j] = i-i0时,调用的是被错误重载的二元减法运算符,不管输入的i和i0是什么值,都会返回你设定的10000.0,所以整个数组被填充成这个值。 - 而改成
delay[i,j] = i+(-1*i0)时,这里的-1*i0使用的是一元负号运算符(和二元减法是完全独立的两个运算符),它没有被错误重载,所以能正常计算-i0,再和i相加,得到了预期的i - i0结果。
修复方法
只需要把错误的变量声明修正为下划线命名即可:
t_arrive_min = 10000.
这样就不会意外重载减法运算符,i-i0就能正常执行减法运算了。
内容的提问来源于stack exchange,提问作者Swopnil Ojha
相关产品推荐
相关产品推荐

