在 Julia 中使用迭代时努力改变给定矩阵的值
Struggling with changing values of a given matrix while using the iteration in Julia
我需要在每个 forloop 之后计算 V 和 V_new 之间的差异。
我期待打印结果类似于 [1 1 ; 1 1] [2 2 ; 2 2] [2 2 ; 2 2] [3 3 ; 3 3]
然而,我得到的却是[2 2 ; 2 2] [2 2 ; 2 2] [3 3 ; 3 3] [3 3 ; 3 3]
看来问题出在 V = V_new
。
我试图在 for 循环开始之前首先替换 V 并仅通过 forloop 而不是 V 更改 V_new 的值。
但看起来 V 的值也通过 for 循环发生了变化。
在这种情况下,解决方案是什么?
dif = 1.0
it = 0
itmax = 2
V = [1 1 ; 1 1]
V_new = [1 1 ; 1 1]
# Iteration
while it < itmax
it = it+1
println(it)
V = V_new
for i in 1:2
for j in 1:2
V_new[i,j] = 1 + V_new[i,j]
end
end
dif = maximum(abs.(V-V_new))
println(V)
println(V_new)
end
V = V_new
将 V
变量重新分配给 V_new
的数组,因此它们最终引用了 相同的 数组(V
的先前数组被丢弃)。但是,您需要 V
和 V_new
来引用 不同的 数组,因此您可以比较前后的值。
如您所知,解决方法是将 V_new
的数组值复制到 V
's array. However, your for-loop has many lines of code to figure out the indices from the arrays' 维度。 V
和V_new
形状一样,所以兼容广播:
V .= V_new
这相当于对所有索引 i
进行索引赋值 V[i] = V_new[i]
;这会在每个索引处改变 V
,它不会重新分配 V
。广播本身是一个从维度中计算出索引的循环,因此您不必编写代码来完成它。
我需要在每个 forloop 之后计算 V 和 V_new 之间的差异。
我期待打印结果类似于 [1 1 ; 1 1] [2 2 ; 2 2] [2 2 ; 2 2] [3 3 ; 3 3]
然而,我得到的却是[2 2 ; 2 2] [2 2 ; 2 2] [3 3 ; 3 3] [3 3 ; 3 3]
看来问题出在 V = V_new
。
我试图在 for 循环开始之前首先替换 V 并仅通过 forloop 而不是 V 更改 V_new 的值。
但看起来 V 的值也通过 for 循环发生了变化。
在这种情况下,解决方案是什么?
dif = 1.0
it = 0
itmax = 2
V = [1 1 ; 1 1]
V_new = [1 1 ; 1 1]
# Iteration
while it < itmax
it = it+1
println(it)
V = V_new
for i in 1:2
for j in 1:2
V_new[i,j] = 1 + V_new[i,j]
end
end
dif = maximum(abs.(V-V_new))
println(V)
println(V_new)
end
V = V_new
将 V
变量重新分配给 V_new
的数组,因此它们最终引用了 相同的 数组(V
的先前数组被丢弃)。但是,您需要 V
和 V_new
来引用 不同的 数组,因此您可以比较前后的值。
如您所知,解决方法是将 V_new
的数组值复制到 V
's array. However, your for-loop has many lines of code to figure out the indices from the arrays' 维度。 V
和V_new
形状一样,所以兼容广播:
V .= V_new
这相当于对所有索引 i
进行索引赋值 V[i] = V_new[i]
;这会在每个索引处改变 V
,它不会重新分配 V
。广播本身是一个从维度中计算出索引的循环,因此您不必编写代码来完成它。