Gauss-Seidel迭代法解线性方程组

Gauss-Seidel迭代法解线性方程组

迭代公式为:
x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 i − 1 a i j x j ( k + 1 ) − ∑ j = i + 1 n a i j x j ( k ) ) , i = 1 , 2 , . . . , n x_{i}^{(k+1)} = \frac{1}{a_{ii}}(b_{i} - \sum_{j=1}^{i-1}a_{ij}x_{j}^{(k+1)}-\sum_{j = i+1}^{n}a_{ij}x_{j}^{(k)}),i=1,2,...,n xi(k+1)=aii1(bij=1i1aijxj(k+1)j=i+1naijxj(k)),i=1,2,...,n

function[x,err] = GaussSeidel(A,b,x0,tol,kmax)
%Input -A is n*n matrix
%      -b is n*1 vector
%      -x0 is initial solution row vector
%      -tol is the tolerance
%      -kmax is the maximum number of iteration
%Output -x is the solution
%       -err is the error estimate

n = length(b);
err = 10;  % 误差
k = 0;    % 迭代次数
while(k < kmax)&(err>tol)  % 小于最大迭代次数且误差大于容忍值时
    for i = 1:n
        t = b(i);
        if i > 1
            t = t - A(i,1:i-1)*x(1:i-1)';
        end
        if i < n
            t = t - A(i,i+1:n)*x0(i+1:n)';
        end
        x(i) = t/A(i,i);
    end
    k = k+1;   
    err = max(abs(x-x0));  % 更新误差
    x0 = x;
end

Tips:
与Jacobi迭代法的区别在于,使用了本次迭代已经求出的新的值来更新解,Jacobi迭代法的公式为:
x i ( k + 1 ) = 1 a i i ( b i − ∑ j = 1 , j ≠ i n a i j x j ( k ) ) , i = 1 , 2 , . . . , n x_{i}^{(k+1)} = \frac{1}{a_{ii}}(b_{i} - \sum_{j = 1,j\not=i}^{n}a_{ij}x_{j}^{(k)}),i=1,2,...,n xi(k+1)=aii1(bij=1,j=inaijxj(k)),i=1,2,...,n

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值