程序2.2: 用Gauss-Seidel迭代求线性方程组解
文件: Gaussmethod.m
function[x,k] = Gaussmethod(A,b,x0,N,eps)
n = length(A);
x1 = zeros(n,1);
x2 = zeros(n,1);
x1 = x0;
r = max(abs(b-A*x1));
k = 0;
while r>eps
for i=1:n
sum = 0;
for j=1:n
if j>i
sum = sum+A(i,j)*x1(j);
elseif jsum = sum+A(i,j)*x2(j);
end
x2(i) = (b(i)-sum)/A(i,i);
end
end
r = max(abs(x2-x1));
x1 = x2;
k = k+1;
if k>N
disp('迭代失败');
return;
end
end
x=x1;
实例: 用Gauss-Seidel迭代法求解方程组
-4x1 + x2 + x3 + x4 = 1
x1 -4x2 + x3 + x4 = 1
x1 + x2 -4x3 + x4 = 1
x1 + x2 + x3 -4x4 = 1
输入:
A=[-4,1,1,1;1,-4,1,1;1,1,1,-4,1;1,1,1,-4];
b=[1;1;1;1];
x0=[0;0;0;0];
[x,k] = Gaussmethod(A,b,x0,100,10^-5);
结果:
k=21
x=
-9.999896e-001
-9.999910e-001
-9.999992e-001
-9.999932e-001
因篇幅问题不能全部显示,请点此查看更多更全内容