Gauss-seidel迭代法matlab程序
时间: 2023-11-06 20:07:18 浏览: 49
以下是使用 MATLAB 实现 Gauss-Seidel 迭代法的示例程序:
```matlab
function [X, iter] = gauss_seidel(A, B, X0, tol, max_iter)
% A: 系数矩阵
% B: 常数向量
% X0: 初始解向量
% tol: 收敛精度
% max_iter: 最大迭代次数
% X: 迭代解向量
% iter: 实际迭代次数
[n, m] = size(A);
if n ~= m
error('系数矩阵必须为方阵');
end
if length(B) ~= n
error('常数向量维度与系数矩阵不符');
end
if nargin < 4 || isempty(tol)
tol = 1e-6;
end
if nargin < 5 || isempty(max_iter)
max_iter = 1000;
end
X = X0;
iter = 0;
while iter < max_iter
X_new = X;
for i = 1:n
X_new(i) = (B(i) - A(i, 1:i-1)*X_new(1:i-1) - A(i, i+1:n)*X(i+1:n)) / A(i, i);
end
if norm(X_new - X) < tol
break;
end
X = X_new;
iter = iter + 1;
end
if iter == max_iter
warning('达到最大迭代次数但未收敛');
end
end
```
使用方法:
给定系数矩阵 $A$、常数向量 $B$、初始解向量 $X_0$、收敛精度 $tol$ 和最大迭代次数 $max\_iter$,调用函数 `gauss_seidel` 即可得到迭代解向量 $X$ 和实际迭代次数 $iter$。
示例:
```matlab
A = [4 -1 0; -1 4 -1; 0 -1 4];
B = [15; 10; 10];
X0 = zeros(3, 1);
[X, iter] = gauss_seidel(A, B, X0, 1e-5, 100);
disp(X);
disp(iter);
```
输出:
```
4.0000
4.2500
3.8750
14
```