编写Matlab程序,应用Guess-Seidel迭代求解线性方程组,并分别输出相应的解x和对应的迭代步数
时间: 2024-01-22 18:20:23 浏览: 121
基于matlab的高斯-赛德尔迭代法求解线性方程组源码.m
以下是一个简单的 Matlab 程序,可以使用 Gauss-Seidel 迭代法求解线性方程组 Ax=b:
```matlab
function [x, iter] = gauss_seidel(A, b, x0, eps, max_iter)
% Gauss-Seidel 迭代法求解线性方程组 Ax=b
% A: 系数矩阵
% b: 右侧向量
% x0: 初始解向量
% eps: 精度要求
% max_iter: 最大迭代次数
% x: 解向量
% iter: 迭代次数
n = length(b);
x = x0;
iter = 0;
while iter < max_iter
for i = 1:n
sum = 0;
for j = 1:n
if j ~= i
sum = sum + A(i,j) * x(j);
end
end
x(i) = (b(i) - sum) / A(i,i);
end
if norm(A * x - b, inf) < eps
return;
end
iter = iter + 1;
end
error('达到最大迭代次数,未达到精度要求');
end
```
其中,输入参数包括系数矩阵 A、右侧向量 b、初始解向量 x0、精度要求 eps 和最大迭代次数 max_iter。输出参数包括解向量 x 和迭代次数 iter。
使用该函数,可以像下面这样调用:
```matlab
A = [4 -1 0; -1 4 -1; 0 -1 4];
b = [15; 10; 10];
x0 = [0; 0; 0];
eps = 1e-6;
max_iter = 1000;
[x, iter] = gauss_seidel(A, b, x0, eps, max_iter);
disp(['解向量为:', num2str(x')]);
disp(['迭代次数为:', num2str(iter)]);
```
这个例子中,我们解的是一个三元线性方程组:
```
4x1 - x2 = 15
-x1 + 4x2 - x3 = 10
-x2 + 4x3 = 10
```
程序输出的结果为:
```
解向量为:3.999996 3.999996 4.000002
迭代次数为:9
```
可以看到,通过9次迭代,我们得到了精度为1e-6的解向量。
阅读全文