我在python中计算矩阵更新时发现了一个非常有趣的问题。我必须计算误差(这是之前n个更新矩阵之间的差异)。
$('.segment__item').click(function() {
$pagetype = $(this).data('type');
$('#modal-newpage')
.modal('show')
.modal('setting', 'duration', 280)
.modal('setting', 'closable', false);
$('h1.modal__title').text("New " + $pagetype + " page");
$('form').attr('action', $('form').attr('action') + $pagetype);
$('input[name=page_type]').val($pagetype);
});
我想解决2-d板(温度分布)的拉普拉斯方程,当误差小于某个最小值时,将达到平衡。但是在计算错误时,我总是得到0,但是当我打印矩阵时,我发现它不应该是零。伙计们,我认为我在这里有一些概念问题,所以请帮忙。
答案 0 :(得分:0)
您的问题是,在更新功能中分配C=A; D=A
时,您使用浅拷贝,即仅复制参考。基本上,在构造D
之后,所有三个变量A,C,D
都指向同一个对象。使用
def update(A):
C=1.0*A
D=1.0*A
D[1:-1,1:-1]=(C[0:-2,1:-1]+C[2:,1:-1]+C[1:-1,0:-2]+C[1:-1,2:])/4
return(np.abs(D-C),D)
甚至更短
def update(A):
D=A.copy()
D[1:-1,1:-1]=(A[0:-2,1:-1]+A[2:,1:-1]+A[1:-1,0:-2]+A[1:-1,2:])/4
return(np.abs(D-A),D)
传递参数并执行算术运算会自动生成深层副本。
你知道(几何,一阶)收敛速度类似于max(1-C/(nx^2), 1-C/(ny^2))
,即使对于中等大的网格也很慢?对于实际应用,更好地使用共轭梯度,其他Krylov相关算法或多网格方法(或稀疏求解器库,UMFpack ......)。
在(未使用的)error
程序中,是否应该有
e = abs(A-B)
目前,您返回新生成的零矩阵C
的范数。