gpt-3.5-turbo-0301· OpenAI WildChat-4.8M (AI2)
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解 10x(1)-x(2)-2x(3)=7.2 -x(1)+10x(2)-2x(3)=8.3…
0
Download- User
使用雅可比迭代法或高斯-赛德尔迭代法对下列方程组进行求解 10x(1)-x(2)-2x(3)=7.2 -x(1)+10x(2)-2x(3)=8.3 -x(1)-x(2)+5x(3)=4.2 给出python代码(代码中有必要注释)
- Assistant
我们来分别看一下雅可比迭代法和高斯-赛德尔迭代法的代码实现:
雅可比迭代法:
import numpy as np # 设置迭代次数和误差 max_iter = 1000 epsilon = 1e-6 # 初始化向量x x = np.zeros(3) # 系数矩阵A和右侧常数向量b A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]]) b = np.array([7.2, 8.3, 4.2]) # 对角线元素 D = np.diag(np.diag(A)) # 非对角线元素 L_U = A - D # 迭代计算 for i in range(max_iter): x_new = np.dot(np.linalg.inv(D), b - np.dot(L_U, x)) err = np.linalg.norm(x_new - x) if err < epsilon: break x = x_new print('solution:', x)高斯-赛德尔迭代法:
import numpy as np # 设置迭代次数和误差 max_iter = 1000 epsilon = 1e-6 # 初始化向量x x = np.zeros(3) # 系数矩阵A和右侧常数向量b A = np.array([[10, -1, -2], [-1, 10, -2], [-1, -1, 5]]) b = np.array([7.2, 8.3, 4.2]) # 对角线元素 D = np.diag(np.diag(A)) # 非对角线元素 L_U = A - D L = np.tril(L_U) U = np.triu(L_U) # 迭代计算 for i in range(max_iter): x_new = np.dot(np.linalg.inv(D - L), b - np.dot(U, x)) err = np.linalg.norm(x_new - x) if err < epsilon: break x = x_new print('solution:', x)上面两段代码中,我们使用了numpy模块里的diag()函数、tril()函数和triu()函数分别提取矩阵的对角线元素、下三角元素和上三角元素,这样就能分别得到系数矩阵A的对角线元素、非对角线下三角元素L和非对角线上三角元素U。在每次迭代时,计算新的向量x_new,直到满足停止条件(设定的迭代次数达到最大值或误差小于设定的阈值)。