当前位置: 首页 > 知识库问答 >
问题:

Gauss seidel在python中的实现

昌招
2023-03-14
import numpy as np
from scipy.linalg import solve_triangular as triSolve

#O(n) per iteration, so overall O(nN), good for large SPD/SDD matrices
def GS_iter(A, b, N):
    m = len(A)
    L = np.tril(A)
    P = L-A
    print(P)
    
    x = np.zeros(m)
    print(x)
    for k in range(N):
        x = triSolve(L,b+P@x, True)
        
    return x
        


#examples
A = np.array([[10,2,3,1],[1,10,0,1],[0.2,1,10,2],[0.1,3,3,10]])
b = np.array([1,2,1,0])

x = GS_iter(A,b,50000)

ans = A@x-b
print(ans)
print(np.linalg.norm(ans))

上面是我在Python中的Gauss-Seidel方法。由于某种原因,即使在矩阵A是严格对角占优的情况下,即使在50000次迭代后,它也不收敛。下面是在MATLAB中工作的相同实现:

function x = gSeidel(A,B,N)
    [n,~] = size(A);
    L = tril(A);
    P = L-A; %P = -U
    
    x = zeros(n,1); %x_0
    for k = 1:N
        x = L\(B+P*x);
    end
end 

我犯了什么错误?我认为它是在TriSolve方法中,因为如果我用常规的LU求解器(如np.linalg.solve)替换它,它就能工作。为什么三角解的行为不像这里想要的那样?

共有1个答案

唐高朗
2023-03-14

lower参数是第四个用x=triSolve(L,b+p@x,lower=true)替换您的行

Signature:
triSolve(
    a,
    b,
    trans=0,
    lower=False,
    unit_diagonal=False,
    overwrite_b=False,
    debug=None,
    check_finite=True,
)
 类似资料:
  • 问题内容: 我找到了它并以它为基础,但它开箱即用时却无法正常工作。我的目标也是将其视为程序包而不是命令行实用程序,因此我的代码更改将反映出来。 当我向设备发送基本命令时,它将返回以下内容。 我的代码读取第一行,但是随后出现错误消息,表明连接暂时不可用,并且没有获得第二行。如果我将其更改为阻塞,它只会阻塞并且永远不会返回。有什么想法吗? 问题答案: 如果您只使用它是否有效? 我认为您应该尝试一些更简

  • 问题内容: 我正在尝试使用可以通过Google Authenticator应用程序 生成的一次性密码。 Google身份验证器的功能 基本上,Google身份验证器实现两种类型的密码: HOTP- 基于HMAC的一次性密码,这意味着密码会随RFC4226的每次调用而更改,并且 TOTP- 基于时间的一次性密码,每30秒更改一次(据我所知)。 Google身份验证器也可以在此处作为开源使用:code

  • 本文向大家介绍在python shell中运行python文件的实现,包括了在python shell中运行python文件的实现的使用技巧和注意事项,需要的朋友参考一下 最近在学习flask开发,写好程序后需要在python shell中运行测试功能。专门抽时间研究了下,总结以防止以后遗忘。 这是测试文件的结构,python_example主文件夹,下面有example.py和一个subexam

  • 问题内容: 我正在尝试使用网站的OAuth,该网站要求签名方法仅是“ HMAC-SHA1”。 我想知道如何在Python中实现此功能? 问题答案: 假单胞菌: 签名错误通常驻留在基本字符串中,请确保您理解这一点(如OAuth1.0规范在此处所述:http://tools.ietf.org/html/draft-hammer- oauth-10#section-3.4 。 1)。 以下输入用于生成签

  • 本文向大家介绍在Python中实现导入(importlib),包括了在Python中实现导入(importlib)的使用技巧和注意事项,需要的朋友参考一下 importlib软件包提供了可移植到任何Python解释器的Python源代码中import语句的实现。这也提供了比用Python以外的其他编程语言实现的实现更容易理解的实现。 该软件包还公开了实现导入的组件,使用户可以更轻松地创建自己的自定

  • 问题内容: 我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用预处理程序指令,可以完全禁用这些语句以进行生产,如下所示: 做类似的事情的最好方法是什么? 问题答案: 如果只想禁用日志记录方法,请使用该模块。如果日志级别设置为排除调试语句,那么它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。 如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的全局变量。