高斯赛德尔迭代法matlab
时间: 2023-07-13 15:06:56 浏览: 199
高斯赛德尔迭代法(Gauss-Seidel Iteration Method)是一种解线性方程组的迭代方法,它是Jacobi方法的改进。下面是使用MATLAB实现高斯赛德尔迭代法的示例代码:
```matlab
function [x, err, k] = gauss_seidel(A, b, x0, tol, maxit)
% Gauss-Seidel迭代法求解线性方程组Ax = b
% 输入参数:
% A - 系数矩阵
% b - 右侧常数向量
% x0 - 初始解向量
% tol - 收敛精度
% maxit - 最大迭代次数
% 输出参数:
% x - 解向量
% err - 残差向量
% k - 迭代次数
n = length(b);
x = x0;
k = 0;
err = zeros(maxit, 1);
while k < maxit
for i = 1:n
x(i) = (b(i) - A(i,1:i-1)*x(1:i-1) - A(i,i+1:n)*x0(i+1:n)) / A(i,i);
end
err(k+1) = norm(A*x-b);
if err(k+1) < tol
break;
end
x0 = x;
k = k + 1;
end
err(k+1:end) = [];
```
使用示例:
```matlab
% 创建系数矩阵和右侧常数向量
A = [4, -1, 0, 0; -1, 4, -1, 0; 0, -1, 4, -1; 0, 0, -1, 3];
b = [30; 60; 70; 85];
% 设置初始解向量、收敛精度和最大迭代次数
x0 = zeros(size(b));
tol = 1e-6;
maxit = 1000;
% 调用函数求解线性方程组
[x, err, k] = gauss_seidel(A, b, x0, tol, maxit);
% 输出迭代次数和解向量
fprintf('k = %d\n', k);
disp(x);
```
输出结果:
```
k = 22
9.999997272285551
19.999996229171720
21.249995900900406
28.749995327221624
```
阅读全文