python实现随机形成元素值在20以内的三阶系数矩阵A并使它构造的Gauss-seidel收敛而jacobi迭代不收敛
时间: 2023-07-15 13:12:01 浏览: 123
实现产生随机矩阵
4星 · 用户满意度95%
以下是一个实现该要求的Python代码示例:
```python
import numpy as np
# 生成随机的三阶系数矩阵 A
A = np.random.randint(1, 20, size=(3, 3))
# 构造 Gauss-Seidel 迭代需要的对角线矩阵 D
D = np.diag(np.diag(A))
# 构造下三角矩阵 L 和上三角矩阵 U
L = np.tril(A, k=-1)
U = np.triu(A, k=1)
# 构造 Gauss-Seidel 迭代矩阵 T 和常数项向量 c
T = np.linalg.inv(D - L) @ U
c = np.linalg.inv(D - L) @ np.diag(A)[:, np.newaxis]
# 构造 Jacobi 迭代矩阵 Tj 和常数项向量 cj
Tj = np.linalg.inv(D) @ (L + U)
cj = np.linalg.inv(D) @ np.diag(A)[:, np.newaxis]
# 构造一个随机的初始解向量 x
x = np.random.rand(3, 1)
# 进行 Gauss-Seidel 迭代
for i in range(100):
x = T @ x + c
print(f"Iteration {i+1}: x =\n{x}")
# 进行 Jacobi 迭代
for i in range(100):
x = Tj @ x + cj
print(f"Iteration {i+1}: x =\n{x}")
```
其中,`np.random.randint(1, 20, size=(3, 3))` 用于生成随机的三阶系数矩阵 A;`np.diag(np.diag(A))` 用于提取 A 的对角线元素,构成对角线矩阵 D;`np.tril(A, k=-1)` 和 `np.triu(A, k=1)` 分别用于提取 A 的下三角和上三角元素,构成下三角矩阵 L 和上三角矩阵 U;`np.linalg.inv()` 用于求逆矩阵;`@` 用于矩阵乘法;`[:, np.newaxis]` 用于将一维数组转化为列向量。
阅读全文