m0_59216851 2021-06-11 10:23 采纳率: 0%
浏览 656

数值分析MATLAB用SOR迭代法求解线性方程组

 

  • 写回答

2条回答 默认 最新

  • CSDN专家-Matlab_Fans 2021-06-11 19:27
    关注
    function SOORTest()
    
    A = [3 -1 1
         3 6 2
         3 3 7];
    B = [1;0;4];
    w = [1];
    r = SOR(A,B,w)
    A*r-B
    
    
    end
    
    function r = SOR(A,B,w,varargin)
    sizeA=size(A);
    sizev=size(varargin);
    if sizev(2) == 0
        rol = 0.000001;
        n = 1000;
        x = zeros(sizeA(1),1);
    elseif sizev(2) == 1
        rol = varargin{1};
        n = 1000;
        x = zeros(sizeA(1),1);
    elseif sizev(2) == 2
        rol = varargin{1};
        n = varargin{2};
        x = zeros(sizeA(1),1000);
    elseif sizev(2) == 3
        rol = varargin{1};
        n = varargin{2};
        x = varargin{3};
    else
        error("输入参数过多");
    end
    for i = 2:n
        for j = 1:sizeA(2)
            sum1=0;
            for k = 1:j
                if j == k
                    sum1 = sum1 - w*(1-1/w)*x(k,i-1);
                    continue;
                end
                sum1 = sum1 - w*x(k,i)*A(j,k)/A(j,j);
            end
            for k = j+1:sizeA(1)
                sum1 = sum1 - w*x(k,i-1)*A(j,k)/A(j,j);
            end
            x(j,i)=w*B(j)/A(j,j)+sum1;
        end
        if any(abs(x(:,i)-x(:,i-1))>rol) == 0
           break;
        end
    end
    r = x;
    end
    

    结果为:

    
    r =
    
             0    0.3333    0.1111    0.0529    0.0396    0.0361    0.0354    0.0352    0.0351    0.0351    0.0351    0.0351
             0   -0.1667   -0.2222   -0.2328   -0.2360   -0.2366   -0.2368   -0.2368   -0.2368   -0.2368   -0.2368   -0.2368
             0    0.5000    0.6190    0.6485    0.6556    0.6573    0.6578    0.6579    0.6579    0.6579    0.6579    0.6579
    
    
    ans =
    
       -1.0000    0.6667    0.1746    0.0401    0.0102    0.0024    0.0006    0.0001    0.0000    0.0000    0.0000    0.0000
             0    1.0000    0.2381    0.0590    0.0141    0.0035    0.0008    0.0002    0.0000    0.0000    0.0000    0.0000
       -4.0000         0    0.0000         0         0   -0.0000         0         0         0   -0.0000         0         0

    经过11步迭代后,方程的误差接近于0,达到了容差范围,解收敛。

    评论

报告相同问题?