Julia迭代运算中矩阵赋值后同步变动问题如何解决
问题原因
Julia 中的矩阵属于可变复合类型,直接使用 = 赋值时不会拷贝值,只会让两个变量指向同一块内存地址。你执行 V = V_new 后,V 和 V_new 本质是同一个矩阵的不同名字,后续修改 V_new 的元素时,V 的值自然也会同步变化,和你的预期逻辑不符。
解决方法
把赋值行修改为值拷贝即可,常用有三种方案,按需选择:
- 普通数值矩阵用浅拷贝即可,语法最简单:
V = copy(V_new) - 矩阵元素是引用类型(比如嵌套数组、自定义结构体)时用深拷贝:
V = deepcopy(V_new) - 不需要新开内存,直接覆盖原有
V的元素,性能最优,要求两个矩阵尺寸一致:V .= V_new
修改后的完整代码
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 = copy(V_new) # 仅修改这一行即可,也可替换为 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
运行结果验证
修改后输出会和你的预期一致:
1 [1 1; 1 1] [2 2; 2 2] 2 [2 2; 2 2] [3 3; 3 3]
内容的提问来源于stack exchange,提问作者Chang
相关产品推荐
相关产品推荐

