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)替换它,它就能工作。为什么三角解的行为不像这里想要的那样?
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以外的其他编程语言实现的实现更容易理解的实现。 该软件包还公开了实现导入的组件,使用户可以更轻松地创建自己的自定
问题内容: 我以前的编程中,代码段仅用于调试目的(记录命令等)。通过使用预处理程序指令,可以完全禁用这些语句以进行生产,如下所示: 做类似的事情的最好方法是什么? 问题答案: 如果只想禁用日志记录方法,请使用该模块。如果日志级别设置为排除调试语句,那么它将非常接近无操作(它仅检查日志级别并返回而不插入日志字符串)。 如果要在特定条件下以字节码编译时实际删除代码块,则唯一的选择是相当神秘的全局变量。