用matlab写一个gauss—Seidel迭代法
时间: 2023-07-20 22:35:24 浏览: 93
好的,以下是用Matlab实现Gauss-Seidel迭代法的示例代码:
```matlab
function [x, iter] = gauss_seidel(A, b, x0, tol, max_iter)
% Gauss-Seidel迭代法求解线性方程组Ax=b
% A: 系数矩阵
% b: 右侧向量
% x0: 初始解向量
% tol: 相对误差容限,默认值为1e-6
% max_iter: 最大迭代次数,默认值为1000
n = length(b);
x = x0;
iter = 0;
err = inf;
if nargin < 5 || isempty(max_iter)
max_iter = 1000;
end
if nargin < 4 || isempty(tol)
tol = 1e-6;
end
while err > tol && iter < max_iter
x_old = x;
for i = 1:n
temp = b(i);
for j = 1:n
if i ~= j
temp = temp - A(i, j) * x(j);
end
end
x(i) = temp / A(i, i);
end
iter = iter + 1;
err = norm(x - x_old) / norm(x_old);
end
if iter == max_iter && err > tol
warning('Gauss-Seidel迭代法未收敛!');
end
end
```
使用示例:
```matlab
% 构造系数矩阵和右侧向量
A = [3 -1 1; 1 -3 -1; 1 1 5];
b = [-1; 2; -7];
% 初始解向量
x0 = [0; 0; 0];
% 求解线性方程组
[x, iter] = gauss_seidel(A, b, x0);
% 输出结果
disp('解向量:');
disp(x);
disp(['迭代次数:' num2str(iter)]);
```
运行结果:
```
解向量:
-1.0000
1.0000
-2.0000
迭代次数:21
```
阅读全文