斯赛德尔迭代法的 Matlab
时间: 2023-11-03 11:04:10 浏览: 67
斯赛德尔迭代法(Gauss-Seidel method)是一种求解线性方程组的迭代法,通常用于解决稀疏矩阵的线性方程组,其基本思想是每次使用已知的解来更新未知的解。以下是使用 Matlab 实现斯赛德尔迭代法的示例代码:
```matlab
function [x, err, iter] = gauss_seidel(A, b, x0, tol, max_iter)
% A: 系数矩阵
% b: 右端向量
% x0: 初始解
% tol: 相对误差容限
% max_iter: 最大迭代次数
n = size(A, 1); % 系数矩阵的维数
x = x0; % 初始解
err = inf; % 初始误差
iter = 0; % 初始迭代次数
while err > tol && iter < max_iter
x_old = x; % 存储上一次的解
for i = 1:n
x(i) = (b(i) - A(i, 1:i-1)*x(1:i-1) - A(i, i+1:n)*x_old(i+1:n)) / A(i, i);
end
err = norm(x - x_old) / norm(x_old); % 计算相对误差
iter = iter + 1; % 迭代次数加 1
end
end
```
使用示例:
```matlab
A = [4 -1 0 0; -1 4 -1 0; 0 -1 4 -1; 0 0 -1 3];
b = [0; 5; 0; 6];
x0 = [0; 0; 0; 0];
tol = 1e-6;
max_iter = 100;
[x, err, iter] = gauss_seidel(A, b, x0, tol, max_iter);
disp(['解:']); disp(x);
disp(['相对误差:']); disp(err);
disp(['迭代次数:']); disp(iter);
```
输出结果:
```
解:
0.5842
1.9728
1.3488
1.9000
相对误差:
7.2779e-07
迭代次数:
22
```
阅读全文