Skip to main content
 首页 » 编程设计

python之检查矩阵是否可以用 Jacobi 方法求解的代码不起作用

2025年05月04日10telwanggs

def checkJacobi(m): 
    row = m.shape[0] 
    col = m.shape[1] 
    solv = 0 
    for i in range(row): 
        x = abs(m[i,i]) 
        y = 0 
        for j in range(col): 
            y = y + abs(m[i,j]) 
        y = y - x 
        if (y < x): 
            solv = solv + 1 
    if (solv == col): 
        return True 
    else: 
        return False 

到目前为止,这是我的代码,用于简单地检查矩阵,看看它们是否可以使用 Jacobi 方法求解(Jacobi 方法只能在每行对角线元素的绝对值支配绝对值之和的情况下使用同一行中的其他元素)。我用应该有效的矩阵对其进行了测试,但它们返回了 False。我的代码有什么问题?

请您参考如下方法:

RTFM:https://en.m.wikipedia.org/wiki/Diagonally_dominant_matrix

测试是 abs(m[i, i]) >= sum(abs(m[i, j]) for j in range(cols)) - abs(m[i, i])。所以,你的代码应该是:

if y <= x: # not y < x 
    solv = solv + 1 

您的代码正在检查严格 对角线优势,而 Jacobi 方法甚至适用于简单的“非严格”方法。