matlab实现雅可比、高斯塞德尔、后项误差计算

稀疏矩阵生成:

function [a, b] = aparsesetup(n)
    e = ones(n, 1);
    n2 = n / 2;
    a = spdiags([-e 3*e -e], -1:1, n, n);
    a(n2+1, n2) = -1;   a(n2, n2+1) = -1;
    b = zeros(n, 1);
    b(1) = 2; b(n) = 2;
    b(2 : n-1) = 1;
end

雅可比方法:

function x = jacobi(a, b, k)
   n = length(b);
   d = diag(a);
   r = a - diag(d);
   x = zeros(n, 1);
   for j = 1 : k
       x = (b - r * x) ./ d;
   end
end

高斯塞德尔方法:

function [x, k] = GaussSeidel(a, b)
    err = 1e-6;
    n = length(b);
    x = zeros(n, 1);
    k = 0;
    L = zeros(n, 1);
    while 1
        xk = x;
        for i = 1 : n
            for j = 1 : n
                if i ~= j
                    L(j) = a(i, j) * x(j);
                end
            end
            s = sum(L);
            L = 0;
            x(i) = (b(i) - s) / a(i, i);
        end
        if norm(x - xk, Inf)<err
            break;
        end
        k = k + 1;
    end
end

后项误差计算:

function be = getbackerror(x, x0)
    n = length(x);
    if nargin==1
        x0 = ones(n, 1);
    end
    sum = 0;
    for i = 1 : n
        sum = sum + abs(x(i) - x0(i));
    end
    be = sum;
end

转载于:https://www.cnblogs.com/wsine/p/4634532.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值