jacobi, gauss-seidel, and SOR

JACOBI


% it there any bug?? who knows...
function [ x ] = jacobi()
%A = [8,-3,2;4,11,-1;6,3,12];
%b = [20,33,36];
A = [0.8 -0.4 0; -0.4 0.8 -0.4; 0 -0.4 0.8];
b = [41; 25; 105];
error_tolerance = 0.05;
max_iter = 500;
error = 1;
[m, n] = size(A);
x_old = zeros(m, 1);
x_new = zeros(m, 1);
iter = 0;
while (error > error_tolerance && iter < max_iter)

    for i = 1: m % rows
        summation = 0;
        for j = 1: n % columns
            if (i ~= j)
               summation = summation + A(i, j) * x_old(j);
            end;  
        end;
    x_new(i) = (b(i) - summation) / A(i, i); 
    end; 
    error = norm(x_old - x_new)/norm(x_new);
    x_old = x_new;
    iter = iter + 1;
end;
if iter == max_iter
    fprintf('The solution diverge\n');
end;
x = x_new;
fprintf('The totol iteration times: %d\n', iter);



gauss-seidel and SOR


% it there any bug?? who knows...
function [ x ] = G_S() % can use A and b as the input
%A = [8,-3,2;4,11,-1;6,3,12];
%b = [20,33,36];
A = [0.8 -0.4 0; -0.4 0.8 -0.4; 0 -0.4 0.8];
b = [41; 25; 105];
error_tolerance = 0.000001; % this tolerance is too big...
max_iter = 500;
error = 1;
[m, n] = size(A);
x_old = zeros(m, 1);
x_new = zeros(m, 1);
iter = 0;
omega = 1; % when omega == 1, it is gauss-seidel method
           % SOR --Successive over relaxation method.
while (error > error_tolerance && iter < max_iter)
    for i = 1: m % rows
        summation = 0;
        for j = 1: n % columns
            if (i ~= j)
               summation = summation + A(i, j) * x_new(j);
               x_new(i) = (b(i) - summation) / A(i, i); 
               x_new(i) = omega * x_new(i) + (1-omega) * x_old(i);
            end;          
        end;
    %x_new(i) = (b(i) - summation) / A(i, i); 
    end;
    error = norm(x_old - x_new)/norm(x_old);
    x_old = x_new;
    iter = iter + 1;
end;
if iter == max_iter
    fprintf('The solution diverge\n');
end;
x = x_new;
fprintf('The totol iteration times: %d\n', iter);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值