python中与矩阵相关的计算

时间:2015-04-26 16:18:05

标签: python-2.7 matrix

我在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,但是当我打印矩阵时,我发现它不应该是零。伙计们,我认为我在这里有一些概念问题,所以请帮忙。

1 个答案:

答案 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的范数。