我已经使用Matlab好几年了,我目前正在通过将一些m文件翻译成jl文件来学习Julia。
这是一个陡峭的学习曲线,但整体进展顺利。但是,我已经在几天内遇到了一个特定的问题。
下面是我在函数中使用的代码片段(值函数迭代)。它在Matlab中工作正常但是 - 由于我不知道的原因 - 在while循环的第二次迭代之后变量error_V为0(因此迭代停止)。
我想出了如何使用调试器,我猜测命令V = TV会导致变量V随着电视在循环内部的变化而动态更新。
(我试图了解Julia如何处理来自here和here的变量,但我还没有(还)能够完全理解Matlab和Julia在这方面的区别。)
有人可以提供帮助或提供进一步的参考吗?我猜是正确的吗?如果是,我该如何改变这种行为?如果不是,那是怎么回事?
非常感谢!
TV = zeros(S,M)
g = zeros(S,M)
error_V = 1
while error_V > eps_in
for ii = 1:S
for jj = 1:M
U = reshape(U_matrix[ii,jj,:],1,M)
U_v = U + beta*pi[ii,:]'*V
TV[ii,jj], g[ii,jj] = findmax(U_v)
end
end
error_V = maximum(maximum(abs.(TV - V)))
V = TV
end
答案 0 :(得分:0)
正如您所发现的那样,默认情况下,Julia赋值运算符=
会在右侧创建对变量的引用。如果您想要阅读该值,则可能必须使用copy()
或deepcopy()
分别创建浅色或深层副本。
V = copy(TV)
或
V = deepcopy(TV)