首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查矩阵是否可以用Jacobi方法求解的代码

检查矩阵是否可以用Jacobi方法求解的代码
EN

Stack Overflow用户
提问于 2018-09-14 23:40:40
回答 2查看 88关注 0票数 2
代码语言:javascript
复制
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。我的代码出了什么问题?

EN

回答 2

Stack Overflow用户

发布于 2018-09-15 00:01:25

实时调频: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])。所以,你的代码应该是:

代码语言:javascript
复制
if y <= x: # not y < x
    solv = solv + 1

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

票数 0
EN

Stack Overflow用户

发布于 2018-09-15 00:03:14

主要错误是(y < x) - -> +1必须是(y <=x)

此外,将绝对值映射到行可能会更清晰一些:

代码语言:javascript
复制
def checkJacobi(m):
row = m.shape[0]
col = m.shape[1]
solv = 0
for i in range(row):
    m[i] = list(map(abs,m[i]))
    x = m[i,i]
    y = 0
    for j in range(col):
        y = y + m[i,j]
    y = y - x
    if (y <= x):
        solv = solv + 1
if (solv == row):
    return True
else:
    return False
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52335247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档