以下是使用雅可比迭代法和高斯-赛德尔迭代法分别求解该方程组的Python代码: import numpy as np 设定迭代次数和精度 maxiter = 1000…
- User
以下是使用雅可比迭代法和高斯-赛德尔迭代法分别求解该方程组的Python代码:
import numpy as np
设定迭代次数和精度
max_iter = 1000 tolerance = 1e-6
定义方程组的系数矩阵和右端向量
A = np.array([[10, -1, -2],[-1, 10, -2],[-1, -1, 5]]) b = np.array([7.2, 8.3, 4.2])
定义初始解向量
x0 = np.zeros_like(b)
使用雅可比迭代法求解
x = x0 for i in range(max_iter): x_new = np.zeros_like(x) for j in range(len(x)): x_new[j] = (b[j] - np.dot(A[j,:], x) + A[j,j]*x[j]) / A[j,j] if np.allclose(x, x_new, rtol=tolerance): break x = x_new print(“雅可比迭代法结果:”, x)
使用高斯-赛德尔迭代法求解
x = x0 for i in range(max_iter): for j in range(len(x)): x[j] = (b[j] - np.dot(A[j,:j], x[:j]) - np.dot(A[j,(j+1):], x[(j+1):])) / A[j,j] if np.allclose(np.dot(A, x), b, rtol=tolerance): break print(“高斯-赛德尔迭代法结果:”, x)
在以上代码的后面每一行加上注释
- Assistant
导入NumPy库
import numpy as np
设定迭代次数和精度
max_iter = 1000 # 最大迭代次数 tolerance = 1e-6 # 迭代停止的精度
定义方程组的系数矩阵和右端向量
A = np.array([[10, -1, -2],[-1, 10, -2],[-1, -1, 5]]) # 系数矩阵 b = np.array([7.2, 8.3, 4.2]) # 右端向量
定义初始解向量
x0 = np.zeros_like(b)
使用雅可比迭代法求解
x = x0 # 初始化解向量 for i in range(max_iter): # 开始迭代计算 x_new = np.zeros_like(x) # 用于存放新的解向量 for j in range(len(x)): # 对于每个未知数 x_new[j] = (b[j] - np.dot(A[j,:], x) + A[j,j]*x[j]) / A[j,j] # 根据迭代公式计算新的解 if np.allclose(x, x_new, rtol=tolerance): # 若迭代结果达到要求,则停止计算 break x = x_new # 更新解向量
print("雅可比迭代法结果:", x)
使用高斯-赛德尔迭代法求解
x = x0 # 初始化解向量 for i in range(max_iter): # 开始迭代计算 for j in range(len(x)): # 对于每个未知数 x[j] = (b[j] - np.dot(A[j,:j], x[:j]) - np.dot(A[j,(j+1):], x[(j+1):])) / A[j,j] # 根据迭代公式计算新的解 if np.allclose(np.dot(A, x), b, rtol=tolerance): # 若迭代结果达到要求,则停止计算 break
print("高斯-赛德尔迭代法结果:", x)