g-s迭代法matlab代码
时间: 2024-02-12 15:31:03 浏览: 111
以下是使用 g-s 迭代法求解线性方程组的 Matlab 代码:
```matlab
function [x, iter] = gs_solve(A, b, tol, max_iter)
% 使用 Gauss-Seidel 迭代法求解线性方程组 Ax=b
% A:系数矩阵,b:常数向量,tol:容差,max_iter:最大迭代次数
% x:解向量,iter:迭代次数
% 初始化解向量和迭代次数
x = zeros(size(b));
iter = 0;
% 循环迭代求解
while iter < max_iter
% 循环更新每个分量值
for i = 1:length(b)
% 计算 Ax 的其余分量和
rest_sum = A(i,1:i-1) * x(1:i-1) + A(i,i+1:end) * x(i+1:end);
% 使用当前 x 的估计值更新第 i 分量
x(i) = (b(i) - rest_sum) / A(i,i);
end
% 计算当前解的残差
residual = norm(A*x-b);
% 如果残差小于容差,则认为已经收敛,退出循环
if residual < tol
break;
end
% 更新迭代次数
iter = iter + 1;
end
% 如果迭代次数达到最大值仍未收敛,则输出警告信息
if iter == max_iter
warning('Gauss-Seidel 迭代法未收敛!');
end
end
```
其中 `A` 是系数矩阵,`b` 是常数向量,`tol` 是容差,`max_iter` 是最大迭代次数。函数的输出结果是解向量 `x` 和迭代次数 `iter`。使用该函数求解线性方程组只需要调用:
```matlab
[x, iter] = gs_solve(A, b, tol, max_iter);
```
其中 `A` 和 `b` 分别是系数矩阵和常数向量,`tol` 和 `max_iter` 分别是容差和最大迭代次数。
阅读全文